Laravel与一对一的关系

时间:2017-10-06 22:00:25

标签: php laravel laravel-5 laravel-eloquent

我有以下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

2 个答案:

答案 0 :(得分:3)

这种关系是倒退的。将status外键放在users表上会创建以下关系:

  • User属于Status
  • Status有很多User s

但是,该问题在hasOne()的{​​{1}}模型上显示User关系。为此,userstatuses()需要tbl_status字段,但这意味着user_id 只能属于一个 Status

相反,Useruserstatus()的正确关系应为User

belongsTo()

然后我们可以在public function userstatus() { return $this->belongsTo(App\Status::class, 'status'); } 模型上使用正确的关系:

User

答案 1 :(得分:2)

我认为最好的方法是添加一个引用用户id列的user_id列作为外键而不是status。那应该解决它。