Возможно ли это в отношениях «многие ко многим» в Ларавеле?

Я пытаюсь разобраться, используя полиморфные отношения для отношений между многими suppliers а также products:

products
id
name
suppliers
id
name

product_supplier
id
product_id        // belongsToMany easily takes care of this id
supplier_id       // and this id
price             // this can be fetched using withPivot('price')
deliverymethod_id // I'm having difficulties "joining" this one.

Я уверен в использовании belongsToMany()Я легко могу сделать что-то вроде этого:

public function products()
{
return $this
->belongsToMany('Supplier')
->withPivot('price');
}

Но выгода здесь присоединяется к тому третьему столбцу в таблице отношений:

deliverymethods
id
name

Я не уверен, как это сделать. Мне сказали, что я хочу после Полиморфных Отношений, однако я не уверен, как реализовать их в моей ситуации.

http://laravel.com/docs/4.2/eloquent#many-to-many-polymorphic-relations

Согласно документации, мне пришлось бы переименовать столбцы таблицы, чтобы включить *able_id а также *able_type, Это действительно сбивает с толку.

Я ожидал, что Laravel будет что-то вроде belongsToMany('Supplier')->withAlso('Deliverymethod')

2

Решение

Я боюсь, что метод не существует (пока?).

Я возвращаюсь к ручному заполнению 3-го отношения:

public function products()
{
return $this
->belongsToMany('Supplier')
->withPivot('price', 'delivermethod_id');
}

Теперь я могу получить доступ ->pivot->deliverymethod_id на каждом Product что я получаю через Supplier,

Вы даже можете добавить функцию в свой Product модель, которая заполняет это автоматически:

Class Product ... {

protected $appends = array('deliverymethod');

public function getDeliverymethodAttribute()
{
return Deliverymethod::find($this->pivot->delivermethod_id);
}

Теперь каждый раз, когда вы запрашиваете товар через его отношение к поставщику, он автоматически включает в себя deliverymethod атрибут с объектом в нем.

(Чтобы он не выдавал ошибку, когда вы получаете Product непосредственно, просто удалите $appends переменная из Product модель и вызов getDeliverymethodAttribute() метод вручную, когда вам это нужно.)

Краткое объяснение о полиморфных отношениях:

Полиморфные отношения для отношений, где две модели связаны с третьей моделью одновременно. Так, например, как User и Product может иметь Picture из них. Теперь не имеет смысла иметь две модели для картинок (UserPicture а также ProductPicture), поскольку они оба имеют одинаковые характеристики. Это было бы идеальной причиной для использования полиморфного отношения, где Picture оба могут принадлежать User или же Product,

Тем не менее, в вашем случае Deliverymethod относится непосредственно к отношению между Supplier а также Product, Так что это не то место, где полиморфные отношения будут работать, но вместо этого это должно быть сделано так, как вы это сделали.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]