Laravel 模型嵌套查询
Laravel Model nested query
我试图编写一个查询来从数据库中获取完整的用户饮食。问题是我无法从 diet_food table 获取数据。这是我的 tables:
- diet_settings(id,total_days,等等)。用户饮食基本信息
- eating_types(id,diet_id,eating_time,等等)。早餐、午餐等信息
- diet_food(id、eating_type_id、产品等)。与每种饮食类型相关的食物。
这是我在控制器中使用的查询 class:
$diet = Diet::with("eatingType.dietFood")->get()->find($id)->toArray();
所以当我使用 var_dump() 时,它是这样的:
array (size=7)
'id' => int 2
'user_id' => int 1
'total_days' => int 1
'total_eating' => int 6
'notes' => string '' (length=0)
'created' => string '2016-09-01' (length=10)
'eating_type' =>
array (size=3)
0 =>
array (size=6)
'id' => int 7
'diet_id' => int 2
'eating_time' => string '8:00' (length=4)
'eating_type' => string 'Breakfast' (length=10)
'recommended_rate' => int 0
'diet_food' =>
array (size=0)
...
1 =>
array (size=6)
'id' => int 8
'diet_id' => int 2
'eating_time' => string '12:00' (length=5)
'eating_type' => string 'Lunch' (length=14)
'recommended_rate' => int 0
'diet_food' =>
array (size=0)
...
在数组中,diet_food 是空的,即使我在数据库中存储了数据。
饮食模型
class Diet extends Model
{
public $table = "diet_settings";
public $timestamps = false;
public function eatingType(){
return $this->hasMany(EatingType::class);
}
}
饮食类型模型
class EatingType extends Model
{
public $timestamps = false;
public $table = "eating_types";
public function dietFood(){
return $this->hasMany(DietFood::class, 'id','eating_type_id');
}
public function diet(){
return $this->belongsTo(Diet::class);
}
}
减肥食品模型
class DietFood extends Model
{
public $timestamps = false;
public $table = "diet_food";
public function eatingType(){
return $this->belongsTo(EatingType::class);
}
}
按照本指南解决了枢轴问题:http://laraveldaily.com/pivot-tables-and-many-to-many-relationships/
此外,当您输出数据时,应该这样做:
$diets = Diet::with('eating')->get();
foreach($diets as $diet){
var_dump($diet->eating->toArray());
}
我试图编写一个查询来从数据库中获取完整的用户饮食。问题是我无法从 diet_food table 获取数据。这是我的 tables:
- diet_settings(id,total_days,等等)。用户饮食基本信息
- eating_types(id,diet_id,eating_time,等等)。早餐、午餐等信息
- diet_food(id、eating_type_id、产品等)。与每种饮食类型相关的食物。
这是我在控制器中使用的查询 class:
$diet = Diet::with("eatingType.dietFood")->get()->find($id)->toArray();
所以当我使用 var_dump() 时,它是这样的:
array (size=7)
'id' => int 2
'user_id' => int 1
'total_days' => int 1
'total_eating' => int 6
'notes' => string '' (length=0)
'created' => string '2016-09-01' (length=10)
'eating_type' =>
array (size=3)
0 =>
array (size=6)
'id' => int 7
'diet_id' => int 2
'eating_time' => string '8:00' (length=4)
'eating_type' => string 'Breakfast' (length=10)
'recommended_rate' => int 0
'diet_food' =>
array (size=0)
...
1 =>
array (size=6)
'id' => int 8
'diet_id' => int 2
'eating_time' => string '12:00' (length=5)
'eating_type' => string 'Lunch' (length=14)
'recommended_rate' => int 0
'diet_food' =>
array (size=0)
...
在数组中,diet_food 是空的,即使我在数据库中存储了数据。
饮食模型
class Diet extends Model
{
public $table = "diet_settings";
public $timestamps = false;
public function eatingType(){
return $this->hasMany(EatingType::class);
}
}
饮食类型模型
class EatingType extends Model
{
public $timestamps = false;
public $table = "eating_types";
public function dietFood(){
return $this->hasMany(DietFood::class, 'id','eating_type_id');
}
public function diet(){
return $this->belongsTo(Diet::class);
}
}
减肥食品模型
class DietFood extends Model
{
public $timestamps = false;
public $table = "diet_food";
public function eatingType(){
return $this->belongsTo(EatingType::class);
}
}
按照本指南解决了枢轴问题:http://laraveldaily.com/pivot-tables-and-many-to-many-relationships/
此外,当您输出数据时,应该这样做:
$diets = Diet::with('eating')->get();
foreach($diets as $diet){
var_dump($diet->eating->toArray());
}