在 Laravel 上合并数组
Posted
技术标签:
【中文标题】在 Laravel 上合并数组【英文标题】:Merge arrays on Laravel 【发布时间】:2021-03-30 14:36:40 【问题描述】:我是 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]
]
【问题讨论】:
使用OptionMenu::with('GroupMenu')
然后你在哪里声明
tipousuario
是什么 - 另一个您在会话中存储 id 的相关模型?
是的! tipousuario 是另一个相关模型
【参考方案1】:
如果你想在没有任何约束的情况下获取所有带有相关 OptionMenu 记录的 GroupMenu 记录
$data = GroupMenu::with('optionmenu')->get();
但是,如果您想根据 tipousuario
的 ID 限制每个 GroupMenu 父记录的相关 OptionMenu 记录 - 您可以从会话中获得,如您的问题所示,那么您可以尝试类似
$data = GroupMenu::with([
'optionmenu' => fn($query) =>
$query->whereHas('tipousuario', fn($q) =>
$q->where('tipousuario_id', session()->get('tipousuario_id'))->orderBy('orden')
)
])->get();
【讨论】:
感谢@Donkarnash 解决了我的问题! @CesarArroyo 很高兴我能帮上忙。为了后续访问者的利益,您可以将答案标记为已接受/赞成。以上是关于在 Laravel 上合并数组的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Helper 合并 Period 数组 [关闭]
我们如何使用 apiresources laravel 将多个关系合并到一维数组中