Объединить массивы в Laravel

Я новичок в Laravel, и я пытаюсь объединить или присоединиться к массивам в одном массиве, которые имеют отношения «один ко многим». Это модели:

class GroupMenu extends Model
{
    public function optionmenu()
    {
        return $this->hasMany(OptionMenu::class, 'groupmenu_id');
    }
}
class OptionMenu extends Model
{
    public function groupmenu()
    {
        return $this->belongsTo(GroupMenu::class, 'groupmenu_id');
    }
}

Также у меня есть эта функция, которая возвращает следующее расположение.

  public function getOptionMenus()
{
    $optionmenu = OptionMenu::whereHas('tipousuario', function ($query) {
        $query->where('tipousuario_id', session()->get('tipousuario_id'))->orderBy('orden');
    })->get()->toArray();

    return $optionmenu;
}

Вывод такой:

array:17 [▼
  0 => array:2 [▼
    "id" => 1
    "groupmenu_id" => 1
  ]
  1 => array:2 [▼
    "id" => 2
    "groupmenu_id" => 1
  ]
  2 => array:2 [▼
    "id" => 3
    "groupmenu_id" => 1
  ]
  3 => array:2 [▼
    "id" => 4
    "groupmenu_id" => 2
  ]
  4 => array:2 [▼
    "id" => 5
    "groupmenu_id" => 2
  ]

Моя проблема в том, что я хочу иметь массив, в котором для каждого группового меню есть массив меню параметров, что-то вроде этого:

  0 => array:2 [▼
    "id" => 1
    "optionmenu" => array:3[array of all the optionsmenu that belongs to the groupmenu]      

  ]
  1 => array:2 [▼
    "id" => 2
    "optionmenu" => array:1[array of all the optionsmenu that belongs to the groupmenu]  
  ]

Используйте OptionMenu::with('GroupMenu'), а затем вы, где заявление

Eddy 20.12.2020 18:05

Что такое tipousuario — другая связанная модель, для которой у вас есть идентификатор, сохраненный в сеансе?

Donkarnash 20.12.2020 18:05

Да! типусуарио - еще одна родственная модель

Cesar Arroyo 20.12.2020 18:08
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы хотите получить все записи GroupMenu со связанными записями OptionMenu без каких-либо ограничений

$data = GroupMenu::with('optionmenu')->get();

Однако, если вы хотите ограничить связанные записи OptionMenu для каждой родительской записи GroupMenu на основе идентификатора tipousuario, который вы получаете из сеанса, как показано в вашем вопросе, вы можете попробовать что-то вроде

$data = GroupMenu::with([
  'optionmenu' => fn($query)  =>
    $query->whereHas('tipousuario', fn($q) =>
      $q->where('tipousuario_id', session()->get('tipousuario_id'))->orderBy('orden')
    )
  ])->get();

Спасибо @Donkarnash, что решили мой вопрос!

Cesar Arroyo 20.12.2020 18:38

@CesarArroyo Рад, что смог помочь. Вы можете, пожалуйста, пометить ответ как принятый / проголосовать за других посетителей.

Donkarnash 20.12.2020 18:40

Другие вопросы по теме