Laravel-与Eloquent在数据透视表上进行多对多

时间:2018-06-28 21:30:34

标签: php laravel eloquent many-to-many

我有三个要关联的表。 运输方法运输公司付款方法

关系:

运输方式 <-axis1-> 船舶公司

数据点1 <-pivot2->付款方式

好吧,我想做的是ShipmentMethod_A附加到ShipCompany_B,为此记录(来自数据透视表1),我想通过数据透视表2附加Payment_method表中的记录。

ShipmentMethod模型:

public function ship_companies()
{
    return $this->belongsToMany(ShipCompany::class, 'shipment_methods_ship_companies', 'shipment_method_id', 'ship_company_id')->withPivot('price_kc', 'price_ha');
}

ShipCompany模型:

public function shipment_methods()
{
    return $this->belongsToMany(ShipCompany::class, 'shipment_methods_ship_companies', 'ship_company_id', 'shipment_method_id');
}

我需要做的是我想检索特定ShipmentMethod之类的ShipCompany的所有付款

ShipmentMethods->ship_companies->pivot->payments_methods

感谢。

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是让您拥有一个Model来为您 pivot1 扩展Pivoted类。 pivot1 应该具有 id 列,以便在 pivot2 中使用。所以代码应该是这样的,

运输方法模型:

public function ship_companies()
{
    return $this->belongsToMany(ShipCompany::class, 'shipment_methods_ship_companies', 'shipment_method_id', 'ship_company_id')->using('App\pivot1')->withPivot('id','price_kc', 'price_ha');
}

请注意,我已将id放在withPrivot和链式using()方法中

您的 pivot1 模型应该是这样的

pivot1模型:

use Illuminate\Database\Eloquent\Relations\Pivot;

class pivot1 extends Pivot
{

    public function Payment_methods()
    {
      return $this->belongsToMany(Payment_methods::class, 'pivot2_table_name', 'pivot1_id', 'payment_method_id');
    }
}

,最后您可以像这样保存到 pivot2

ShipmentMethods->ship_companies->pivot->payments_methods()->sync([payment_method_ids])

由于所有数据透视关系都返回数组的集合,因此您需要循环ShipmentMethods->ship_companies关系才能获得数据透视关系。

希望这会有所帮助!