Laravel循环查询范围

时间:2018-10-13 16:44:28

标签: php laravel laravel-5 scope eloquent

我有一个循环,该循环运行查询并构建一个关联数组,每个结果集一个键/值对。发生的是,范围在循环迭代时不断堆积。

<?php

foreach ($master_asset_categories as $master_category) {
    $master_assets_this_category = $asset_query->group($master_category->id)->get();
    $master_asset_array[$master_category->id] = 
    $master_assets_this_category;
}

group()范围会不断添加到每个循环中,从而导致类似...

group($master_category->id)->group($master_category->id)->group($master_category->id)->group($master_category->id)

每个循环的$ master_category-> id不同。因为每个Asset模型只有一个asset_group_id,并且所有where子句都用“ and”链接,所以该查询不返回任何内容。

在每次迭代后,我可以使用什么来删除最新的group()范围,以便在每次迭代中仅使用单个当前组($ master_category-> id)范围?

1 个答案:

答案 0 :(得分:2)

这是因为$asset_query是一个对象。代替:

$master_assets_this_category = $asset_query->group($master_category->id)->get();

您应该在这里使用:

$master_assets_this_category = (clone $asset_query)->group($master_category->id)->get();

在每个查询中仅具有一个group($master_category->id)范围,而不是应用先前迭代中的多个范围。

使用clone时,您将始终从与循环之前相同的对象开始。