繁体   English   中英

在 Laravel 上合并 arrays

[英]Merge arrays on Laravel

我是 Laravel 的新手,我正在尝试在一个数组中合并或加入 arrays,它们具有一对多的关系。 这些是模型:

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');
    }
}

我也有这个 function 它返回以下安排。

  public function getOptionMenus()
{
    $optionmenu = OptionMenu::whereHas('tipousuario', function ($query) {
        $query->where('tipousuario_id', session()->get('tipousuario_id'))->orderBy('orden');
    })->get()->toArray();

    return $optionmenu;
}

output是这样的:

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 记录的 GroupMenu 记录

$data = GroupMenu::with('optionmenu')->get();

但是,如果您想根据问题中所示的从 session 获得的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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM