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,但无法解决该问题。
答案 0 :(得分:2)
您可以尝试一下
$delivery = Delivery::with(['deliveryItems' => function($query){
$query->doesntHave('stockMovements');
}])->find($deliveryId);
dd($delivery->deliveryItems);
答案 1 :(得分:2)
您可以尝试通过删除where('entity_id', $this->delivery_id)
模型的关联方法中的DeliveryItem
条件。
public function stockMovements()
{
return $this->hasMany(StockMovement::class, 'product_id', 'product_id');
}