如何建立适当的关系?

时间:2017-01-27 14:50:57

标签: laravel laravel-5 laravel-5.2

我有两种类型的用户:个人和商业。个人用户可以属于Business用户。这就是我创建了具有user_id,business_user_id。

的数据透视表personal_users_business_user

我有UserPersonalUserBusinessUser型号。 在用户模型中,我有这种关系:

  public function company()
    {
          return $this->belongsToMany('App\Models\PersonalUser','personal_users_business_users', 'user_id', 'business_user_id');
    }

我正在使用attach()方法:

  $user->company()->attach($business_user_id);

它将数据存储在数据透视表中。现在我想要的是这样的事情:

  <input class="typeahead form-control" type="text" name="user_company"  @if($user->company->approved == 0) ? disabled : '' @endif value="{{$user->company->company_name}}">

但我不知道如何从数据透视表中的用户访问这些字段。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您需要Business用户拥有多个个人用户,则应使用hasMany,belongsTo关系。在您的BusinessUser模型中,您应该创建方法:

public function personalUsers() {
    return $this->hasMany(PersonalUser::class);
}

在您的PersonalUser模型中,您应该定义此方法:

public function businessUser() {
    return $this->belongsTo(BusinessUser::class);
}

在迁移中,对于个人用户表,请添加以下字段:

$table->integer('business_user_id')->unsigned()->nullable();

这将使您的代码正确。你不需要那种关系的数据透视表。

答案 1 :(得分:0)

像这样设置关系

public function company()
{
    return $this->belongsToMany('App\Models\PersonalUser','personal_users_business_users', 'user_id', 'business_user_id')
            ->withPivot(['your_pivot_column']);
}

现在当你编码

$user = User::with(['company'])->get();

$user与预期的company列保持pivot关系。