【问题标题】:Merge arrays on Laravel在 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 是另一个相关模型

标签: php arrays laravel eloquent


【解决方案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 很高兴我能帮上忙。为了后续访问者的利益,您可以将答案标记为已接受/赞成。
猜你喜欢
  • 2020-04-09
  • 2017-03-07
  • 2016-02-28
  • 2020-08-02
  • 2020-12-29
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 2017-02-22
相关资源
最近更新 更多