\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/

10-12 12:43
查看更多