【问题标题】:Retrieve many to many relation with laravel eloquent用 laravel eloquent 检索多对多关系
【发布时间】:2019-08-17 20:28:40
【问题描述】:

我正在尝试从一个对象中分组的多对多关系中检索重复日期的数据。

我有菜单表和daily_mealz 表和数据透视表(menu_daily_mealz) 问题是daily_mealz在其日期列中包含重复的日期值,但每个生的都包含不同的meal_id。

所以,我需要检索一个原始但包含与该日期相关的所有餐食ID

我只使用 belongsTo 关系检索,它们 for 循环遍历数据以获取我需要的对象。

关系

public function dailyMeals(){
    return $this->belongsToMany(DailyMeals::class, 'menu_daily_meals', 'menu_id', 'daily_meal_id');
}
public function menus(){
    return $this->belongsToMany(Menu::class, 'menu_daily_meals', 'daily_meal_id', 'menu_id');
}

数据库结构

菜单表

+-----+----------------+
| id  | name           |
+-----+----------------+
| 1   | first menu     |
| 2   | second menu    |
+-----+----------------+

每日餐桌

+----+-------------+---------+-------+
| id | date        | meal_id | stock |
+----+-------------+---------+-------+
| 1  | 2019-03-01  |    1    | 250   |
|    |             |         |       |
| 2  | 2019-03-01  |    2    | 100   |
|    |             |         |       |
| 3  | 2019-03-02  |    3    | 150   |
|    |             |         |       |
| 4  | 2019-03-02  |    4    | 70    |
|    |             |         |       |
| 5  | 2019-03-03  |    5    | 350   |
|    |             |         |       |
| 6  | 2019-03-03  |    6    | 180   |
+----+-------------+---------+-------+

Menu_daily_meals 表

+----+---------+---------------+
| id | menu_id | daily_meal_id |                               
+----+---------+---------------+
| 1  |       1 |     1         |
| 2  |       1 |     2         |
| 3  |       1 |     3         |
| 4  |       1 |     4         |
| 5  |       1 |     5         |
| 6  |       1 |     6         |
| 7  |       2 |     3         |
| 8  |       2 |     5         |
| 9  |       2 |     6         |
+----+---------+---------------+

我需要这样检索对象

{
  "id": 1,
  "name": "first menu",
  "daily_meals": [
    {
       "id": 1,
       "daily_date": "2019-03-01",
       "meals" : [
              {
                "meal_id" : 1,
                "stock"   : 250
              },
              {
                "meal_id" : 2,
                "stock"   : 100
              },
          ]
    },
    {
       "id": 2,
       "daily_date": "2019-03-02",
       "meals" : [
              {
                "meal_id" : 3,
                "stock"   : 150
              },
              {
                "meal_id" : 4,
                "stock"   : 70
              },
          ]
    },
    {
       "id": 3,
       "daily_date": "2019-03-03",
       "meals" : [
              {
                "meal_id" : 5,
                "stock"   : 350
              },
              {
                "meal_id" : 6,
                "stock"   : 180
              },
          ]
    }
  ]
}

有什么帮助吗?

【问题讨论】:

    标签: mysql php-7 laravel-5.6


    【解决方案1】:

    您应该使用 load 函数将外部数据加载到模型中(使用 eager loading):

    $menu=Menu::find(1);
    $menu->load('dailyMeals','dailyMeals.meals');
    

    注意:对于 hide pivot object in response,请将此代码添加到您的菜单模型中:

    protected $hidden = ['pivot'];
    

    注意:您的menu 模型中应该有dailyMealsdailyMeals 模型中应该有meals 关系

    欲了解更多信息,您可以访问Laravel Document

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2019-03-26
      • 1970-01-01
      • 2023-02-07
      • 2013-02-09
      • 1970-01-01
      • 2022-01-12
      • 2013-05-27
      • 2013-05-15
      相关资源
      最近更新 更多