我正在尝试从一个对象中的多对多关系中检索重复日期的数据。
我有菜单表,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
},
]
}
]
}
有什么帮助吗?
答案 0 :(得分:0)
您应该使用加载功能将外部数据加载到模型中(使用紧急加载):
$menu=Menu::find(1);
$menu->load('dailyMeals','dailyMeals.meals');
注意:对于作为响应隐藏枢轴对象,请将此代码添加到菜单模型中:
protected $hidden = ['pivot'];
注意:您的dailyMeals
模型应具有menu
,而meals
模型应具有dailyMeals
关系
有关更多信息,您可以访问Laravel Document。