在 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 将多个关系合并到一维数组中

将两个json数组合并为一个

如何将同一属性上的数组和对象“合并/合并”到平面数组中(使用Javascript)?

合并在Int C ++数组上排序

将多字节数组图像数据合并为一个字节数组数据,并将WriteAllBytes合并为单个图像输出