问题描述
我正在尝试编写一个查询,该查询需要一组记录并循环遍历它们并显示所有记录,但是如果一条记录包含一个真实字段,我需要它隐藏特定记录。
用例
- 抢占
purchased
字段为真的产品 - 如果该集合中的某个产品的字段
includes_bonus
设置为true,则列出{id}为2的bonus
产品之外的所有产品
1。
这将获取已购买的所有设置为true的产品
$productsPurchased = $user->products()->where('purchased',1)->get();
2次尝试
下面我尝试做上述事情,但是我没有很多运气。
-
获取购买商品的所有商品均设置为1(true)
-
如果产品
includes_bonus
为1(true),则从产品列表中隐藏ID为2的产品记录。$productsPurchased = $user->products()->where('purchased',1) ->where('includes_bonus',1) ->where('products.id','!==',2) ->get();
刀片
然后我想在刀片服务器中进行一次foreach,列出我的用例中的所有产品。
@foreach($purchasedProducts as $purchasedProduct)
<div class="col-xl-6 p-0 p-xl-4 mb-5 mb-xl-0">
<div class="card border">
<div class="card-header border rounded-top"
</div>
<div class="card-block">
@endforeach
解决方法
尝试“过滤器”集合
$productsPurchased->filter(function ($value,$key) {
return '**condition for filter**';
});
,尝试以下方法:
$productsPurchased = $user->products()->where('purchased',1);
if($user->products()->where('includes_bonus',1)->first()){
$productsPurchased=$productsPurchased->where('products.id','!=',2);
}
$productsPurchased=$productsPurchased->get();