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 有很多 Users

但是,该问题显示 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."