Laravel - 关闭关系的过滤器集合

时间:2021-06-20 09:11:53

标签: laravel

想知道如果没有对应的值,是否有办法对关系使用闭包来过滤整行?

示例代码:

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 以查看我是否必须在集合中包含礼品卡。

最好的问候

1 个答案:

答案 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();