Laravel:三种模式之间的关系

时间:2017-12-03 20:18:49

标签: php laravel laravel-5

我正在开展一个项目,每个用户都可以在指定中分配。

我使用三种模式完成了我的工作:用户指定&的 UsersDesignation

表结构是:

User:
id      name        email       password
---     -----       -----       --------
1       User 1      u1@em.com   kjasdkfjla
2       User 2      u2@em.com   fksdjfghal
3       User 3      u3@em.com   ghhaljaljl

Designation:
id      name
---     -----
1       Faculty
2       Lecturer
3       Lab Instructor

UsersDesignation:
id      userId      designationId
---     ------      -------------
1       1           2
2       2           1
3       3           3

但是通过建立关系,我很难从designation对象中获取user用户。

到目前为止,我在我的模型中尝试过:

User(model):
public function userDesignation()
{
    $this->hasOne('App\UsersDesignation', 'id', 'userId');
}

UserDesignation(model):
public function user()
{
    $this->belongsToMany('App\User', 'userId', 'id');
}
public function designation()
{
    $this->belongsTo('App\Designation', 'designationId', 'id');
}

实际上,我想用user profiles来展示user模型designation。但上述方式无效。我不知道如何建立这种关系。

这是我的观点文件:

<div>
    {{ $user->userDesignation->designationId }}
</div>

我每次都得到的错误

  

ErrorException(E_ERROR)App \ User :: userDesignation必须返回一个   关系实例。 (视图:   .... \资源\视图\型材\ show.blade.php)

我非常需要这个帮助!

2 个答案:

答案 0 :(得分:3)

如果用户只能有1个可能的名称,则不需要数据透视表(UsersDesignation表)。

只需在用户表中添加 designation_id ,然后使用belongsTo和hasMany关系。

用户

public function designation()
{
    return $this->belongsTo('App\Designation');
}

<强>指定

public function users()
{
    return $this->hasMany('App\User');
}

答案 1 :(得分:0)

您可能需要使用关系many to many

示例:

表格结构:

users:
id
name
email
password

designations:
id
name

designation_user
id
designation_id
user_id

您的模特关系

应用\用户

public function designations()
{
    return $this->belongsToMany('App\Designation');
}

应用\指定

public function users()
{
    return $this->belongsToMany('App\User');
}    

要获得用户的指定,您的通话应如下所示:

<div>
    @foreach($user->designations()->get() as $designation)
        {{ $designation->name }}
    @endforeach
</div>