php - 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) 范围?
解决方案
这是因为$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
您将始终从循环之前的相同对象开始。
推荐阅读
- amazon-web-services - 在 S3 前缀下查找对象数量的有效方法
- linux-kernel - 在将数据传输到外部设备之前,是否需要将数据从用户空间复制到内核?
- android - 如何在特定位置android的背景中显示xml形状
- julia - 朱莉娅不是运算符
- javascript - 在 JS 中创建一个可以传输到 PHP 的随机 AES 密钥?
- flutter - 如何在颤动中更改文本字段的内部颜色?
- cloud - 运行单元时空闲断开连接 Google Colab
- pandas - 未创建虚拟变量
- python - pyaudio 没有安装
- amazon-web-services - 如何在 aws 胶水上设置多个自动化工作流程