我的项目中有以下模型,无法链接:
订阅(代表应用程序订阅者的公司)
客户(作为订户的公司客户之一)
承包商(订阅公司使用的承包商)
用户(可以附加到订阅[subscription_user枢纽],但也可以与客户或承包商相关)。
所以我的问题是,subscription_user
数据透视表需要user_id
,subscription_id
,company_id
和company_type
,而公司是承包商还是客户。
所以我的数据透视模型如下:
class SubscriptionUser extends Pivot
{
public function company() {
return $this->morphTo();
}
}
对于我的用户,我认为我已经正确设置了关系,如下所示:
public function clients() {
return $this->hasManyThrough('App\Client', 'App\SubscriptionUser', 'user_id', 'id', null, 'company_id')->where('company_type', 'App\Client');
}
public function contractors() {
return $this->hasManyThrough('App\Contractor', 'App\SubscriptionUser', 'user_id', 'id', null, 'company_id')->where('company_type', 'App\Contractor');
}
在客户/承包商上:
public function subscriptionUsers() {
return $this->morphMany('App\SubscriptionUser', 'company');
}
public function users() {
return $this->hasManyThrough('App\User', 'App\SubscriptionUser', 'company_id', 'id', null, 'user_id')->where('company_type', 'App\Client');
}
但是我似乎无法弄清楚如何轻松地向客户/承包商添加或删除用户。要将用户添加到客户端和订阅中时,应该执行$client->subscription->users()->syncWithoutDeatching([...]);
还是client->subscription->users()->attach($user, ['company' => $client]);
?问题在于它似乎没有将公司识别为多态领域。我是否需要在数据透视图中手动设置company_id
和company_type
?
任何帮助将不胜感激。
我是否可能以错误的方式来处理?我应该创建一个client_user
表和一个contractor_user
表并将用户链接到订阅吗?如果是这样,如何获得所有嵌套用户的订阅?这很重要,因为我使用subscription_user数据透视表根据用户是内部用户(无客户端还是承包商),客户端还是承包商来确定用户的角色。