\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::find()
查询中获得了 $user
对象,然后我尝试通过延迟加载 $user->load('status')
方法来访问 status
对象 .
我正在关注文档,但它似乎无用,因为 $user->status
仍然返回null .
public function foo(User $user) {
$user->load('status');
$user->status // returns null
}
我究竟做错了什么?
--------- SOLUTION ---------
实际上,对于延迟加载任何关系,外键值需要存储在模型对象中 .
在我的 find
操作中,我没有查询 user_status_id
字段 . 当我将此字段添加到查询中时, $user->status
语句开始返回 UserStatus
模型 .
我不认为这些信息是在Laravel文档上写的,它可能很简单,但我花了一些时间才弄明白 .
2 回答
实际上,对于延迟加载任何关系,外键值需要存储在模型对象中 .
在我的查找操作中,我没有查询user_status_id字段 . 当我将此字段添加到查询中时,$ user-> status语句开始返回UserStatus模型 .
我不认为这些信息是在Laravel文档上写的,它可能很简单,但我花了一些时间才弄明白 .
在status()关系中用行替换
在user()中与此关系
长话短说在App之前添加''并删除第三个参数,因为它不是多对多的关系 .
还要确保您实际使用Eloquent,以便在模型上添加
并分配一个表