Laravel Relationship Pivot表多重关系

时间:2019-10-03 08:17:44

标签: laravel model relation

您需要以某种方式获得这些模型之间的关系

1)自动服务模型

2)大师模型

3)服务模型

这是我的数据透视表结构

id, auto_service_id, master_id, service_id

现在,我需要为每个AutoService获得其母版及其提供的服务。

一个Master可以属于许多AutoService,并在每个AutoService中提供不同的服务。

同一服务可以由多个主服务器在同一AutoService中提供。

如何在这些模型之间建立关系?

1 个答案:

答案 0 :(得分:0)

您应该有一个数据透视表autoservice_service

在您的服务模型中

public function autoServices(){
  $this->belongsToMany('App\AutoService');
}

在您的Master模型中

public function autoServices(){
  $this->hasMany('App\AutoService');
}

在您的AutoService模型中

public function services(){
  $this->belongsToMany('App\Service');
}
public function masters(){
  $this->belongsTo('App\Master');
}
数据透视表中的

然后使用service_idmaster_idautoservice_id。如果要使用时间戳记,请使用方法withTimestamps()(例如$this->belongsToMany('App\Master')->withTimestamps();

编辑: 如果要在主服务器和服务之间建立关系,其中一个主服务器可以具有多个服务,反之亦然,则应制作另一个数据透视表master_service。在Service模型中:

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

以及在Master模型中:

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

现在您可以检查主人的工作,例如

1) Services of master
App\Master::find($id)->services();
2) Which masters do service
App\Service::find($id)->masters();

另一个解决方法是,您可以在数据透视表中添加另一个外键,然后使用->withPivot('column1', 'column2')