mysql - 使用 laravel eloquent 检索多对多关系

标签 mysql php-7 laravel-5.6

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

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

因此,我需要检索一份原始数据,但包含与该日期相关的所有 MealID

我只使用“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
              },
          ]
    }
  ]
}

请问有什么帮助吗?

最佳答案

您应该使用加载函数将外部数据加载到您的模型中(使用热切加载):

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

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

protected $hidden = ['pivot'];

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

更多信息您可以访问Laravel Document .

关于mysql - 使用 laravel eloquent 检索多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55374375/

相关文章:

mysql - Node.js 套接字 io 'Error:Client is not defined'

Php - isset() 条件不起作用

Laravel Eloquent 缓存分页聚合计数结果

Laravel 通过方法获取路由

php - 想修改 laravel 默认登录以检查用户是否已验证

sql - mysql为每场比赛设置一个标志

php - 只需要从日期获取年份和月份

ubuntu 14.04 上 php 7 的 xdebug

PHP PDO MySQL count() 预处理语句

PHP 7 不一致地抛出被零除的错误