Laravel 5.1 - BelongsTo 关系 returns 空

Laravel 5.1 - BelongsTo relationship returns null

\App\User

class User

public function status() {

    return $this->belongsTo('App\UserStatus', 'user_status_id', 'id');
}

\App\User状态

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 仍然 return 为空。

public function foo(User $user) {

    $user->load('status');
    $user->status // returns null
}

我做错了什么?

------------解决方案--------

实际上,要延迟加载任何关系,外键值需要存储在模型对象中。

在我的 find 操作中,我没有查询 user_status_id 字段。当我将此字段添加到查询中时,$user->status 语句开始 return UserStatus 模型。

我认为 Laravel 文档中没有写此信息,它可能很简单,但我花了一些时间才弄明白。

在 status() 关系中用

替换行
return $this->belongsTo('\App\UserStatus', 'user_status_id');

在 user() 关系中与此

return $this->hasMany('\App\User', 'user_status_id');

长话短说,在 App 前添加一个 '\' 并删除第三个参数,因为它不是多对多关系。

还要确保您确实使用了 Eloquent,因此请在模型之上添加

namespace App;

use Illuminate\Database\Eloquent\Model;

class MODELNAME extends Model

并分配一个table

protected $table = 'model_table';

实际上,要延迟加载任何关系,外键值需要存储在模型对象中。

在我的查找操作中,我没有查询 user_status_id 字段。当我将此字段添加到查询中时,$user->status 语句开始 return UserStatus 模型。

我认为 Laravel 文档中没有写这些信息,它可能很简单,但我花了一些时间才弄明白。

我正在使用 Psy Shell 来 运行 它。对于 belongsTo() 中的第一个参数,它可能只是 Classname::class。我遇到了无法执行 belongsTo() 的情况,但是如果您重新启动 Psy Shell,它就可以了。虽然很奇怪。