Laravel 一对一的关系
Laravel relationship with one-to-one
我有以下 users
table 结构:
id
email
....
status // foreign key from tbl_status
现在在我的 tbl_status
:
id
name
description
现在我想创建一个关系,如果我在 users
table 中的状态为 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);
...它始终 returns 状态为 null
,即使每个用户的默认状态为 1 并且状态 table 的 ID 为 1 且具有值。
我认为最好的方法是添加一个 user_id 列,该列引用用户 ID 列作为外键而不是状态。这应该可以解决它。
这个关系倒过来了。将 status
外键放在 users
table 上会创建以下关系:
User
属于 Status
Status
有很多 User
s
但是,该问题显示 User
模型上 userstatuses()
的 hasOne()
关系。为此,tbl_status
需要一个 user_id
字段,但这意味着 Status
只能属于一个 User
.
相反,userstatus()
在 User
上的正确关系应该是 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."
我有以下 users
table 结构:
id
email
....
status // foreign key from tbl_status
现在在我的 tbl_status
:
id
name
description
现在我想创建一个关系,如果我在 users
table 中的状态为 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);
...它始终 returns 状态为 null
,即使每个用户的默认状态为 1 并且状态 table 的 ID 为 1 且具有值。
我认为最好的方法是添加一个 user_id 列,该列引用用户 ID 列作为外键而不是状态。这应该可以解决它。
这个关系倒过来了。将 status
外键放在 users
table 上会创建以下关系:
User
属于Status
Status
有很多User
s
但是,该问题显示 User
模型上 userstatuses()
的 hasOne()
关系。为此,tbl_status
需要一个 user_id
字段,但这意味着 Status
只能属于一个 User
.
相反,userstatus()
在 User
上的正确关系应该是 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."