Запись
1 в моей таблице delivery
связана с:
- stock_movements
- delivery_items
Доставка имеет:
public function deliveryItems()
{
return $this->hasMany(DeliveryItem::class);
}
public function stockMovements()
{
return $this->hasMany(StockMovement::class,'entity_id');
}
DeliveryItem имеет:
public function stockMovements()
{
return $this->hasMany(StockMovement::class, 'product_id', 'product_id')
->where('entity_id', $this->delivery_id);
}
Таблица deliveryItems содержит список элементов, которые должны быть получены при доставке, а таблица stockMovements содержит информацию о том, что необходимо и что было получено. Есть ситуация, когда у меня может быть строка в моей таблице deliveryItems, но нет никакой коррелирующей строки в stockMovements. Я пытаюсь получить коллекцию этих предметов.
Я пробовал такие вещи, как:
$delivery->deliveryItems()->whereHas('stockMovements')->get() //returns empty collection. Can use whereNotHas to get the opposite if it worked.
^^ Это выше возвращает пустую коллекцию.
foreach($delivery->deliveryItems as $item){
dump($item->whereHas('stockMovements')->get());
}
^^ Это похоже на правильный результат, но дает одинаковый результат для каждого из циклов. Я не верю, что мне нужен foreach, но я не уверен, что он будет работать без него! Я думаю, что мне нужно запустить whereHas непосредственно в коллекции deliveryItems, но я не могу понять, как это сделать.