#php #arrays #laravel #eloquent
#php #массивы #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
]
Моя проблема в том, что я хочу иметь массив, в котором для каждого groupmenu есть массив optionmenu, что-то вроде этого:
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]
]
Комментарии:
1. Используйте
OptionMenu::with('GroupMenu')
, а затем оператор where2. Что такое
tipousuario
— другая связанная модель, для которой у вас есть идентификатор, сохраненный в сеансе?3. Да! tipousuario — еще одна связанная модель
Ответ №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();
Комментарии:
1. Спасибо @Donkarnash, который решил мой вопрос!
2. @CesarArroyo Рад, что смог помочь. Пожалуйста, вы можете пометить ответ как принятый / одобренный в интересах последующих посетителей.