\App\User
class User
public function status() {
return $this->belongsTo('App\UserStatus', 'user_status_id', 'id');
}
\App\UserStatus
class UserStatus
protected $fillable = ['id'];
public function user() {
return $this->hasMany('App\User', 'user_status_id', 'id');
}
我已经从带有一些字段的简单
$user
查询中获得了 User::find()
对象,然后我尝试通过使用 status
方法延迟加载来访问 $user->load('status')
对象。我正在关注文档,但它似乎没用,因为
$user->status
仍然返回 null。public function foo(User $user) {
$user->load('status');
$user->status // returns null
}
我究竟做错了什么?
--------- 解决方案 ---------
实际上,要延迟加载任何关系,需要将外键值存储在模型对象中。
在我的
find
操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始返回 UserStatus
模型。我不认为这些信息是写在 Laravel 文档上的,它可能很简单,但我花了一些时间才弄明白。
最佳答案
实际上,要延迟加载任何关系,需要将外键值存储在模型对象中。
在我的查找操作中,我没有查询 user_status_id
字段。当我将此字段添加到查询中时,$user->status
语句开始返回 UserStatus
模型。
我不认为这些信息是写在 Laravel 文档上的,它可能很简单,但我花了一些时间才弄明白。
关于php - Laravel 5.1 - BelongsTo 关系返回 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34459225/