Объединить массивы в 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
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout.
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для...
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
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

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