- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用户迁移如下:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name')->nullable();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
和一个 BlogPosts 迁移如下:
Schema::create('blog_posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('title')->unique();
$table->string('image');
$table->text('text');
$table->timestamps();
});
他们每个人都有一个模型(博客帖子和用户)
public function getUser(){
return $this->belongsTo(User::class);
}
我向数据库添加了一些测试数据,如下所示:
ID: 1, email: test@test.com, password: hashed
ID: 1, title: title, image: /image.jpg, text: some text, user_id: 1
$var = \App\Models\BlogPost::find(1);
$var->getUser(); //Outputs: null
如果我将 getUser 修改为:
public function getUser(){
return $this->belongsTo(User::class)->toSql();
}
tinker 的输出是:
select * from
users
whereusers
.id
is null
最佳答案
澄清一下,当您调用与 ()
的关系时,你有一个 Builder
的实例类,它允许您链接方法以执行其他查询逻辑。例如:
$var = BlogPost::find(1);
$var->getUser();
如果您在
php artisan tinker
中运行此代码,输出不应该是
null
,而是
Illuminate\Database\Eloquent\Relations\BelongsTo
的一个实例.预计您会通过
closure
到您的查询以实际执行它:
$var = BlogPost::find(1);
$var->getUser()->first();
这应该输出
App\Models\User
的实例,或者,如果没有关联的记录,
null
.
$var = BlogPost::find(1);
$var->getUser;
当您省略
()
时,合适的
closure
在幕后自动应用。在
belongsTo()
的情况下,
->first()
被申请;被应用。
public function user() {
return $this->belongsTo(User::class);
}
出于几个原因。一、
public function getUser()
建议通过 getter 方法调用(就像你正在做的那样,通过
->getUser()
),但由于这可以作为属性调用(通过
->getUser
),它是不明确的。其次,使用与模型相同的名称自动应用外键。相比:
public function getUser() {
return $this->belongsTo(User::class, 'user_id');
}
public function user() {
return $this->belongsTo(User::class);
}
如果您使用
getUser()
,您需要通过
user_id
作为外键(感谢 r89human 捕捉到这个
https://stackoverflow.com/a/66441903/3965631 )。如果您使用
user()
,然后它会自动确定。
关于php - 为什么我在 Laravel 中的简单属于关系不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66441297/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!