过滤集合并删除集合雄辩的laravel

时间:2016-11-29 02:46:04

标签: laravel laravel-5.3

我想从集合中删除过滤后的集合,就像我有这个返回的集合一样。

$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);

不起作用,也不是删除集合的有效语法,我只是不知道如何删除过滤后的集合,例如如果列状态包含未批准的'。有什么想法,请帮忙吗?

2 个答案:

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