''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
}
我做错了什么?
--------解决方案--------
实际上,要延迟加载任何关系,外键值都需要存储在模型对象中。
在我的find
操作中,我没有查询user_status_id
字段。当我将该字段添加到查询中时,$user->status
语句开始返回UserStatus
模型。
我不认为这些信息写在Laravel文档上,它可能很简单,但我花了一些时间才弄清楚。
实际上,要延迟加载任何关系,外键值都需要存储在模型对象中。
在查找操作中,我没有查询user_status_id
字段。当我将该字段添加到查询中时,$user->status
语句开始返回UserStatus
模型。
我不认为这些信息写在Laravel文档上,它可能很简单,但我花了一些时间才弄清楚。
在status()关系中将行替换为
return $this->belongsTo(''App'UserStatus', 'user_status_id');
与该的user()关系
return $this->hasMany(''App'User', 'user_status_id');
长话短说,在应用程序之前添加一个"''",并删除第三个参数,因为它不是多对多关系。
还要确保你真的使用Eloquent,所以在型号的顶部添加
namespace App;
use Illuminate'Database'Eloquent'Model;
class MODELNAME extends Model
并分配一个表
protected $table = 'model_table';
我使用Psy Shell运行它。对于belongsTo()中的第一个参数,它可能只是Classname::class。我遇到了无法执行belongsTo()的情况,但如果重新启动PsyShell,它就起作用了。不过这很奇怪。