首页 文章

Laravel的关系 - 在哪里有很多

提问于
浏览
0

我的 delivery 表中的1个条目与以下内容相关:

  • 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,但我不确定热,没有它让它工作!我想我需要直接在deliveryItems集合上运行whereHas但是我无法弄清楚如何 .

2 回答

  • 2

    您可以尝试删除 DeliveryItem model关系方法中的 where('entity_id', $this->delivery_id) 条件 .

    public function stockMovements()
    {
        return $this->hasMany(StockMovement::class, 'product_id', 'product_id');
    }
    
  • 2

    你能试试吗

    $delivery = Delivery::with(['deliveryItems' => function($query){
                      $query->doesntHave('stockMovements');
                  }])->find($deliveryId);
    
    dd($delivery->deliveryItems);
    

相关问题