【问题标题】:Laravel - How to get data from two models?Laravel - 如何从两个模型中获取数据?
【发布时间】:2020-02-18 08:38:57
【问题描述】:

在这种情况下,我想通过菜单 id 从关系中获取所有数据。我该怎么做?

我尝试过在线搜索,但找不到类似的案例...请帮助...

这是我的模型:

菜单

class Menu extends Model
{
    protected $fillable = [
        'name', 'img', 'status', 'views'
    ];

    public function stores()
    {
        return $this->belongsToMany(Store::class, 'store_menu');
    }

    public function categories()
    {
        return $this->hasMany(Category::class);
    }

}

类别

class Category extends Model
{
    protected $fillable = ["img", "title", "description", "status", "menu_id"];

    public function items()
    {
        return $this->hasMany(Item::class);
    }

    public function menu()
    {
        return $this->belongsTo(Menu::class, 'menu_id');

    }
}

项目

class Item extends Model
{
    protected $fillable = [
        'name', 'img', 'price', 'status', 'view', 'category_id'
    ];

    public function category()
    {
        return $this->belongsTo(Category::class, 'category_id');
    }
}

通过执行以下操作,我只能获取菜单的类别:

$id = $request->menu_id;
$menu = Menu::find($id);
$categories = $menu->categories;
dd(menu);

当前结果:

"data": {
        "id": 1,
        "name": "Menu name",
            {
                "id": 1,
                "title": "Category 1 name",
                "menu_id": 1,
            },
            {
                "id": 2,
                "title": "Category 1 name",
                "menu_id": 1,
                
            },
            {
                "id": 3,
                "title": "Category 1 name",         
                "menu_id": 1,
            }
        ]
    },

我想得到的结果:

"data": {
        "id": 1,
        "name": "Menu Name",
        "categories": [
            {
                "id": 1,
                "title": "Category 1 name",
                "menu_id": 1,
                "items":[
                    {
                        "id": 1,
                        "name": "Item 1 Name"
                    },
                    {
                        "id": 2,
                        "name": "Item 2 Name"
                    },
                ]
            },
            {
                "id": 2,
                "title": "Category 2 name",
                "menu_id": 1,
                "items":[
                    {
                        "id": 1,
                        "name": "Item 3 Name"
                    },
                    {
                        "id": 2,
                        "name": "Item 4 Name"
                    },
                ]
            },
            {
                "id": 3,
                "title": "Category 3 name",
                "menu_id": 1,
                "items":[
                    {
                        "id": 1,
                        "name": "Item 5 Name"
                    },
                    {
                        "id": 2,
                        "name": "Item 6 Name"
                    },
                ]

            }
        ]
    },

感谢您的帮助。

【问题讨论】:

    标签: laravel relationship


    【解决方案1】:

    你可以这样做

    $id = $request->menu_id;
    $menu = Menu::find($id);
    $menu->categories = $menu->categories;
    dd(menu);
    

    【讨论】:

      【解决方案2】:
      $id = $request->menu_id;
      $menu = Menu::with('categories')->find($id);
      dd(menu);
      

      【讨论】:

        【解决方案3】:

        您可以利用预先加载来加载嵌套关系:

        $menu = Menu::with('categories.items')->find($id);
        

        【讨论】:

          猜你喜欢
          • 2021-07-17
          • 2021-06-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多