簡體   English   中英

Laravel關系-在哪里有很多

[英]Laravel relationships - whereHas on hasMany

我的delivery表中有1個條目與以下內容有關:

  • 庫存運動
  • 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,但是不確定如果沒有它,它會很熱鬧! 我想我需要直接在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM