Laravel Query Scope в цикле - PullRequest
       23

Laravel Query Scope в цикле

0 голосов
/ 13 октября 2018

У меня есть цикл, который выполняет запрос и создает ассоциативный массив, по одной паре ключ / значение для каждого набора результатов.Происходит следующее: области видимости накапливаются по мере итерации цикла.

<?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_group_id и все предложения where объединяются в цепочку с «и».

Что можно использовать для удаления последней области действия group () после каждой итерации, чтобытолько одна текущая группа ($ master_category-> id) используется для каждой итерации?

1 Ответ

0 голосов
/ 13 октября 2018

Это потому, что $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 вы всегда будете начинать с того же объекта, который у вас был до цикла.

...