У меня проблема с тем, чтобы заставить работать hasManyThrough:
public function deliveryContainers() : HasManyThrough
{
return $this->hasManyThrough(
DeliveryContainer::class, // Final
StockMovement::class, // Intermediate
'product_id', // Foreign key on Intermediate
'id', // Foreign key on Final
'product_id', // Local key on Current
'location_id' // Local key on Intermediate
)->where('delivery_id', $this->delivery_id);
}
Поскольку таблица stockMovements возвращает несколько результатов, моя результирующая коллекция контейнеров доставки содержит повторяющиеся записи.Если бы я мог как-то поместить группу / уникальную в запрос промежуточной таблицы, то это было бы решено.
Я мог бы получить коллекцию с правильной загрузкой deliveryContainers, используя следующее:
public function deliveryContainers()
{
return $this->hasMany(StockMovement::class, 'entity_id', 'delivery_id')
->with('deliveryContainer')
->where('product_id', $this->product_id)
->get()
->unique('location_id');
}
Однако для доступа к deliveryContainer у меня теперь есть следующее:
foreach($this->deliveryContainers() as $row){
$row->deliveryContainer->id;
}
И что я хотел бы иметь ...
foreach($this->deliveryContainers() as $row){
$row->id;
}
Есть ли способ подтолкнуть загруженные отношенияповысить уровень (если это можно использовать для его описания) или, что еще лучше, добавить какой-то уникальный фильтр в отношение hasManyThrough?
Структура таблицы
delivery_exceptions (где возникает эта связь)
delivery_containers
stock_movements
- entity_id (связан с идентификатором поставки)
- product_id
Отношения
- A исключение доставки принадлежит продукту
- A продукт hasMany stock_movements
- A движение на складе принадлежит контейнер доставки
- A исключение доставки hasMany контейнеры доставки ... (косвенно, через комбинацию движения товара и запаса)