【问题标题】:Laravel Query Scope in LoopLaravel 循环中的查询范围
【发布时间】:2018-10-13 16:44:27
【问题描述】:

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

<?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) 范围?

【问题讨论】:

    标签: php laravel laravel-5 scope eloquent


    【解决方案1】:

    这是因为$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-&gt;id) 范围,而不是应用以前迭代的多个范围。

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

    【讨论】:

    • 我有一种类似的感觉——我尝试了几种方法来获得相同的效果,但都没有奏效。 (克隆)确实有效!这就是为什么我来这里问...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2016-09-03
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多