我正在学习laravel框架,我有一个非常简单的问题:
我有三个表:
食物表:
foods
--------------
id | name
成分表:
ingredients
---------------
id, | name
数据透视表:
food_ingredient
---------------
food_id | ingredient_id
在模型中,我具有“ belongsToMany”方法:
食物模型:
public function ingredients(){
return $this->belongsToMany('App\Models\Ingredient');
}
成分模型:
public function foods(){
return $this->belongsToMany('App\Models\Food');
}
FoodsController(索引):
$foods = Food::all();
foreach($foods as $food){
$food->ingredients = Ingredient::join('food_ingredient','food_ingredient.id','=','ingredients.id')
->where('food_ingredient.food_id',$food->id)->get();
}
我想获取每种食物的成分信息(只是现在的名称),而该查询(一个在foreach循环中)可以完成,但是我不确定是否要在正确的方法。我没有使用belongsToMany关系,所以...据我所知一定有问题。
如何获取成分名称?
直到知道这些名称都可以,但是我将添加第三个表“ allergens”,并将其作为数据透视表“ allergen_ingredient”。然后,我将必须获取每种食物,其成分以及每种成分的过敏原。所以,我想从现在开始做。
谢谢。
答案 0 :(得分:0)
食物模型
class Food extends Model
{
protected $table = 'foods';
protected $primaryKey = 'food_id';
public $incrementing = TRUE;
public $timestamps = FALSE;
protected $fillable = [
'food_name'
];
public
function ingredients()
{
return $this->belongsToMany(Ingredient::class, 'food_ingredients', 'food_id', 'ingredient_id');
}
}
成分模型
class Ingredient extends Model
{
protected $table = 'ingredients';
protected $primaryKey = 'ingredient_id';
public $incrementing = TRUE;
public $timestamps = FALSE;
protected $fillable = [
'ingredient_name'
];
public
function foods()
{
return $this->belongsToMany(Food::class, 'food_ingredients', 'ingredient_id', 'food_id');
}
}
您可以这样称呼它:
$foods = Food::all();
foreach( $foods as $food )
{
foreach( $food->ingredients as $ingredient )
{
echo $ingredient->ingredient_name . " <br>";
}
}
food_ingredients是数据透视表名称