[英]Laravel relationships - whereHas on hasMany
我的delivery
表中有1個條目與以下內容有關:
交貨有:
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,但是不確定如果沒有它,它會很熱鬧! 我想我需要直接在deliveryItems集合上運行whereHas,但是無法解決該問題。
你可以試試這個嗎
$delivery = Delivery::with(['deliveryItems' => function($query){
$query->doesntHave('stockMovements');
}])->find($deliveryId);
dd($delivery->deliveryItems);
您可以嘗試刪除DeliveryItem
模型的關聯方法中的where('entity_id', $this->delivery_id)
條件。
public function stockMovements()
{
return $this->hasMany(StockMovement::class, 'product_id', 'product_id');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.