Laravel - многие ко многим на сводной таблице с Eloquent - PullRequest
0 голосов
/ 29 июня 2018

У меня есть три стола, которые я хочу связать. Ship__methods , Ship_companies и Payment_methods .

Отношения:

Shipment_methods <- pivot1 -> Ship_companies

pivot1 <- pivot2 -> Payment_methods

Ну, я хочу, например, ShipmentMethod_A присоединен к ShipCompany_B, и для этой записи (из pivot1) я хочу прикрепить запись из таблицы Payment_method через таблицу pivot2.

Метод отгрузки Модель:

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');
}

Что мне нужно сделать, так это то, что я хочу получить все платежи для ShipCompany определенного способа доставки, например

ShipmentMethods->ship_companies->pivot->payments_methods

Thanx.

1 Ответ

0 голосов
/ 29 июня 2018

Я думаю, что для вас лучше всего иметь Model, который расширяет Pivoted класс для вас pivot1 . 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');
}

обратите внимание, что я поставил идентификатор в 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, чтобы получить отношение сводки.

Надеюсь, это поможет!

...