想知道如果没有对应的值,是否有办法对关系使用闭包来过滤整行?
示例代码:
foreach ($paiementMethods as $value) {
$giftCards = GiftCard::with(['userEntered', 'userEmployee', 'client', 'payement', 'payement.payementMethods' => function($query) use ($value)
{
$query->where('id', $value);
}])
->where('date','>=', $dateStart)
->where('date','<=', $dateEnd)
->orderBy('updated_at', 'desc')->get();
$giftCardsCollection = $giftCardsCollection->merge($giftCards);
}
}
在本例中,如果 $query->where
没有找到与 payement.payementMethods
匹配的 $value
行,我希望 giftCard
返回 null。我得到的结果是 giftCard
,只有 payement.payementMethods
上的关系是 empty
。
我的另一个解决方案是查询礼品卡,然后检查 $value
以查看我是否必须在集合中包含礼品卡。
最好的问候
答案 0 :(得分:1)
我觉得用whereHas
,可以解决
$giftCards = GiftCard::with(['userEntered', 'userEmployee', 'client', 'payement', 'payement.payementMethods'])
->whereHas( 'payement.payementMethods', function($query) use ($paiementMethods) {
$query->whereIn('id', $paiementMethods);
})
->where('date','>=', $dateStart)
->where('date','<=', $dateEnd)
->orderBy('updated_at', 'desc')
->get();