我有以下users
表结构:
id
email
....
status // foreign key from tbl_status
现在在tbl_status
:
id
name
description
现在我想创建一个关系,如果我在users
表中的状态为1,我想得到它的名字。我试过了:
在我的User
模型中:
class User extends Model
{
protected $fillable = [
'name', 'email', 'password', 'status'
];
public function userstatus()
{
return $this->hasOne('App\Status', 'id', 'status');
}
}
在Status
模型中:
class Status extends Model
{
protected $fillable = [
'name', 'description'
];
}
通过...
获取记录时return User::with("userstatus")->paginate(10);
...即使每个用户的默认状态为1且状态表的ID为1且值为1,它也始终将状态返回为null
。
答案 0 :(得分:3)
这种关系是倒退的。将status
外键放在users
表上会创建以下关系:
User
属于Status
Status
有很多User
s 但是,该问题在hasOne()
的{{1}}模型上显示User
关系。为此,userstatuses()
需要tbl_status
字段,但这意味着user_id
只能属于一个 Status
。
相反,User
上userstatus()
的正确关系应为User
:
belongsTo()
然后我们可以在public function userstatus()
{
return $this->belongsTo(App\Status::class, 'status');
}
模型上使用正确的关系:
User
答案 1 :(得分:2)
我认为最好的方法是添加一个引用用户id列的user_id列作为外键而不是status。那应该解决它。