PHP ошибка ограничения памяти при глобальном использовании переменной в laravel 5.4 - PullRequest
0 голосов
/ 24 января 2020

Я сделал мега-меню, используя db, как показано ниже, который каждый раз меняет свои значения. Пожалуйста, обратитесь к приведенному ниже коду:

$randomCategories = Category::where('parent_id', 0)
        ->where('id', '!=', xConst::X['id'])
        ->where('id', '!=', yConst::Y['id'])
        ->take(13)
        ->get();

    $randomCategories_withItsFirstChild_andItsSixChildrens = [];
    foreach ($randomCategories as $randomCategory) {
        $findingChildrenOf_randomCategories_withItsFirstChild = Category::where('parent_id', $randomCategory['id'])
            ->inRandomOrder()
            ->take(6)
            ->get();

        foreach ($findingChildrenOf_randomCategories_withItsFirstChild as $singleChildFromTheCollection) {
            $findChildrens = Category::where('parent_id', $singleChildFromTheCollection['id'])
                ->inRandomOrder()
                ->take(6)
                ->get();
            array_push($randomCategories_withItsFirstChild_andItsSixChildrens, $findChildrens);
        }
    }
    $devided_array = array_chunk($randomCategories_withItsFirstChild_andItsSixChildrens, 6);

    $finalMenu = [];
    $i = 0;

    foreach ($randomCategories as $randomCategory) {
        array_push($finalMenu, ['mainCat' => $randomCategory, 'subCats' => array_chunk($devided_array[$i], 2)]);
        $i++;
    }

    return $finalMenu;

Что я здесь делаю, так это то, что

  1. Сначала выбираем случайные 12 основных категорий из БД,
  2. Затем выбираем 6 случайные дочерние категории для каждой основной категории
  3. Затем снова выберите еще шесть дочерних категорий для каждой вышеуказанной дочерней категории

Это работает нормально, когда я вызываю это в контроллерах. Но так как я хочу эту переменную глобально в моем приложении laravel, я сделал отдельный помощник и вставил в нее код, как показано ниже:

// Building mega menu
public static function makeMegaMenu()
{
    //ABOVE CODE SEGMENT
    }

    return $finalMenu;
}

Затем я попытался использовать эту переменную глобально через AppServiceProvider, как это:

public function boot()
{
    view()->composer('*', function ($view) {

        $finalMenu = CategoriesMenuHelper::makeMegaMenu();
        view()->share('finalMenu', $finalMenu);

    });
}

Но я получаю эту ошибку:

Допустимый объем памяти 134217728 байт исчерпан (попытался выделить 8392704 байт)

I знать, увеличивая предел памяти, можно исправить это. Но в настоящее время я использую более сложные запросы с еще 3 базами данных. Поэтому я думаю, что в моем коде должно быть что-то не так, который используется для создания мегаменю. Так может ли кто-нибудь помочь мне с этим?

Обратите внимание, что я прошел через много ответов stackoverflow почти.

Спасибо.

...