首页 > 解决方案 > Laravel 循环中的查询范围

问题描述

我有一个循环,它运行一个查询并构建一个关联数组,每个结果集都有一个键/值对。正在发生的事情是,随着循环的迭代,作用域不断堆积。

<?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 模型只有一个 assets_group_id 并且所有 where 子句都使用“and”链接。

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

标签: phplaravellaravel-5scopeeloquent

解决方案


这是因为$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您将始终从循环之前的相同对象开始。


推荐阅读