\应用\用户
class User
public function status() {
return $this->belongsTo('App\UserStatus', 'user_status_id', 'id');
}
\应用\ 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文档上的,可能很简单,但我花了一些时间才弄明白。
答案 0 :(得分:4)
实际上,为了延迟加载任何关系,外键值需要存储在模型对象中。
在我的查找操作中,我没有查询user_status_id字段。当我将此字段添加到查询中时,$ user-> status语句开始返回UserStatus模型。
我认为这些信息不是写在Laravel文档上的,可能很简单,但我花了一些时间才弄明白。
答案 1 :(得分:1)
用
替换该行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
并指定一个表
protected $table = 'model_table';
答案 2 :(得分:0)
我正在使用Psy Shell运行它。对于belongsTo()中的第一个参数,它可能只是Classname :: class。我遇到了无法执行belongsTo()的情况,但是如果重新启动Psy Shell,它会起作用。不过这很奇怪。