Я сделал мега-меню, используя 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;
Что я здесь делаю, так это то, что
- Сначала выбираем случайные 12 основных категорий из БД,
- Затем выбираем 6 случайные дочерние категории для каждой основной категории
- Затем снова выберите еще шесть дочерних категорий для каждой вышеуказанной дочерней категории
Это работает нормально, когда я вызываю это в контроллерах. Но так как я хочу эту переменную глобально в моем приложении 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 почти.
Спасибо.