与laravel雄辩地检索多对多关系

时间:2019-03-27 09:58:13

标签: mysql php-7 laravel-5.6

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

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

因此,我需要检索一个生料,但包含与此日期相关的所有餐食ID

我只使用belongsTo关系进行检索,并且它们用于遍历数据以获得我需要的对象。

关系

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
              },
          ]
    }
  ]
}

有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您应该使用加载功能将外部数据加载到模型中(使用紧急加载):

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

注意:对于作为响应隐藏枢轴对象,请将此代码添加到菜单模型中:

protected $hidden = ['pivot'];

注意:您的dailyMeals模型应具有menu,而meals模型应具有dailyMeals关系

有关更多信息,您可以访问Laravel Document