我有一个循环,该循环运行查询并构建一个关联数组,每个结果集一个键/值对。发生的是,范围在循环迭代时不断堆积。
<?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)范围?
答案 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
时,您将始终从与循环之前相同的对象开始。