我有两种类型的用户:个人和商业。个人用户可以属于Business用户。这就是我创建了具有user_id,business_user_id。
的数据透视表personal_users_business_user
我有User
,PersonalUser
和BusinessUser
型号。
在用户模型中,我有这种关系:
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}}">
但我不知道如何从数据透视表中的用户访问这些字段。有什么建议吗?
答案 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
关系。