我想从集合中删除过滤后的集合,就像我有这个返回的集合一样。
$products = items::where('item_id',$request->item_id)->with('product_reviews')->with('product_reviews.profile')->get();
foreach($products->product_reviews as $r):
if($r->status==='unapproved'):
//remove this from 'products' collections because its not approved yet
$this->remove($this);
endif;
endforeach;
但是这个
$this->remove($this);
不起作用,也不是删除集合的有效语法,我只是不知道如何删除过滤后的集合,例如如果列状态包含未批准的'。有什么想法,请帮忙吗?
答案 0 :(得分:1)
您可以在关系中添加条件。这未经过测试,但最有可能解决您的问题。
items::where('item_id',$request->item_id)->with([
'product_reviews' => function ($query) {
$query->where('status', 'approved')->with('profile');
}
])->get();
答案 1 :(得分:0)
嗯..有点奇怪,因为其他两个解决方案应该适合您的情况。
您是否尝试过滤并将对象传递给其他阵列并在视图中显示?像:
$productWithReviews = items::where('item_id',$request->item_id)->with('product_reviews')->get();
$products = [];
foreach($productWithReviews->product_reviews as $r):
if($r->status!=='unapproved'):
$products[] = $r;
endif;
endforeach;