[英]Laravel relationship with one-to-one
我有以下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,但其值也始终为null
。
这种关系是倒退的。 将status
外键放在users
表上可创建以下关系:
User
属于Status
Status
有很多User
然而,问题示出了hasOne()
的关系User
对模型userstatuses()
为此, tbl_status
将需要一个user_id
字段,但这意味着Status
只能属于一个 User
。
相反, User
上userstatus()
的正确关系应该是belongsTo()
:
public function userstatus()
{
return $this->belongsTo(App\Status::class, 'status');
}
然后,我们可以在User
模型上使用适当的关系:
$user = User::with('userstatus')->find(1);
$user->status; // 1 (foreign key ID)
$user->userstatus->name; // "status name"
$user->userstatus->description // "This is the status description."
我认为最好的方法是添加一个user_id列,该列引用用户id列作为外键而不是状态。 那应该解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.