我正在尝试从分组在一个对象中的多对多关系中检索重复日期的数据。
我有菜单表和 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
模型中应该有 dailyMeals
,dailyMeals 中应该有
模型meals
关系
更多信息您可以访问Laravel Document .
关于mysql - 使用 laravel eloquent 检索多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55374375/