繁体   English   中英

Laravel一对一关系

[英]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

相反, Useruserstatus()的正确关系应该是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM