У меня есть 3 модели: Basket
, Product
а также Asset
,
Basket
может содержать много Asset
с, и один актив может появляться в нескольких Basket
s.
Product
может иметь много Asset
с, но Asset
также может быть назначен более чем одному Product
,
Цель состоит в том, чтобы получить Asset
с в Basket
все еще зная, какие Product
это было добавлено от.
Структура таблицы, которую я представляю себе, такова:
-------------------------------------
| basket_id | asset_id | product_id |
-------------------------------------
| 1 | 1 | 1 |
| 1 | 3 | 1 |
| 1 | 15 | 2 |
| 2 | 23 | 1 |
| 2 | 3 | 1 |
| 3 | 79 | 3 |
-------------------------------------
Я также предполагаю настройку модели примерно так:
class Basket extends Eloquent {
public function assets() {
return $this->belongsToMany('Asset');
}
}
class Product extends Eloquent {
public function assets() {
return $this->belongsToMany('Asset');
}
}
class Asset extends Eloquent {
public function products() {
return $this->belongsToMany('Product');
}
public function product() {
// This should return the product from the product_id column
}
}
Я не уверен, как идти о написании Asset::product()
так что он возвращает соответствующий Product
,
Я хотел бы назвать что-то вроде Basket::find(1)->assets()->first()->product;
получить продукт, из которого был добавлен первый актив в корзину.
Вот небольшой кусок, который делает то, что вам нужно
https://github.com/jarektkaczyk/Eloquent-triple-pivot
и благодаря вашему пиару пакет на packagist:
https://packagist.org/packages/jarektkaczyk/eloquent-triple-pivot
Других решений пока нет …