laravel 5.6 - 获取属于多个的多层父子的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel 5.6 - 获取属于多个的多层父子的数据相关的知识,希望对你有一定的参考价值。

想象一下,我有一个网站有很多catalogssections和每个section,我有items

  • catalogs是与belongstomanysections
  • sections是与belongstomanyitems

我想要的最终结果是有一个嵌套数据:

{
  "catalog_id": 1,
  "catalog_name": "catalog 01",
  "sections": [
    {
      "section_id": 1,
      "name": "section 01",
      "items": [
        {
          "item_id": 1,
          "item_content": {
            "name": "some content1"
          }
        },
        {
          "item_id": 2,
          "item_content": {
            "name": "some content2"
          }
        },
        {
          "item_id": 3,
          "item_content": {
            "name": "some content3"
          }
        }
      ]
    },
    {
      "section_id": 2,
      "name": "section 02",
      "items": [
        {
          "item_id": 2,
          "item_content": {
            "name": "some content2"
          }
        },
        {
          "item_id": 3,
          "item_content": {
            "name": "some content3"
          }
        },
        {
          "item_id": 4,
          "item_content": {
            "name": "some content4"
          }
        }
      ]
    }
  ]
}

我怎样才能做到这一点?

从技术上讲,我可以使用each-loop得到我想要的任何东西,但我希望这是Eloquent更好的解决方案。

答案

试试这个

Catalogs::with('sections.items')->get();
另一答案

我会在@ J.Doe回答你可以指定你想做的事情。例如

Catalogs::with([
   'sections' => function($query){
       return $query->select('column')
              ->where('someCondition', 1)
              ->orderBy('id', 'asc');
   'items' => //some other stuff
];

你也可以使用方法with()来表达你的关系。让我们说sectionssomeTable有关。如果你的someTable模型中有关系方法section,那么:

Catalogs::with([
   'sections' => function($query){
       return $query->select('column')
              ->with('someTable') // here's your relation 
              ->where('someCondition', 1)
              ->orderBy('id', 'asc');
   'items' => //some other stuff
];

以上是关于laravel 5.6 - 获取属于多个的多层父子的数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6 上的 419 Ajax 错误 - 已编辑

Laravel 5.6 试图获取非对象的属性

Laravel 5.6 - “试图获取非对象的属性”

快速向有关系的表中插入 200 多个数据 - Laravel 5.6

Laravel 5.6 artisan 命令从 URI 获取路由

如何在刀片文件 laravel 5.6 中获取当前路由名称