簡體   English   中英

Laravel - 如何從兩個模型中獲取數據?

[英]Laravel - How to get data from two models?

在這種情況下,我想通過菜單 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"
                    },
                ]

            }
        ]
    },

感謝您的幫助。

您可以利用預先加載來加載嵌套關系:

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

你可以這樣做

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM