Laravel 5.1-BelongsTo关系返回null


Laravel 5.1 - BelongsTo relationship returns null

''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,它就起作用了。不过这很奇怪。