這裏我表遷移(4):多對多在laravel許多關係
餐館:
Schema::create('restaurants', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
食物:
Schema::create('foods', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
成分:
Schema::create('ingredients', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
});
restaurant_has_foods_with_ingredients:
Schema::create('restaurant_has_foods_with_ingredients', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('restaurant_id');
$table->unsignedInteger('food_id');
$table->unsignedInteger('ingredient_id');
$table->foreign('restaurant_id')
->references('id')
->on('restaurants')
->onDelete('cascade');
$table->foreign('food_id')
->references('id')
->on('foods')
->onDelete('cascade');
$table->foreign('ingredient_id')
->references('id')
->on('ingredients')
->onDelete('cascade');
});
如何定義我的餐廳,食品,配料模型及其關係?
這裏我需要一些例子:
1,所有餐館在他們的餐盤的具體成分。
2-在特定餐廳的特定菜餚的所有成分。
3 - 所有菜餚在餐廳的特定成分。
...
-------------------------編輯後------------ -----------------
我有我自己的解決方案,但我認爲這不是一個好的。
現在在我的餐廳模式,我有兩種實現獲取食物
一拿到餐廳所有的食物:
public function foods()
{
return $this->belongsToMany('App\Models\Food', 'restaurant_has_foods_with_ingredients')
->groupBy('food_id');
}
而另一個得到的電流restaurunt的具體食品配料
public function foodIngredients(Food $food)
{
$result = DB::table('restaurant_has_foods_with_ingredients')
->select('restaurant_has_foods_with_ingredients.ingredient_id as ingredient_id')
->where('restaurant_has_foods_with_ingredients.restaurant_id',$this->id)
->where('restaurant_has_foods_with_ingredients.food_id',$food->id)
->get();
$ingredients = array();
foreach ($result as $row) {
$ingredients[] = Ingredient::find($row->ingredient_id);
}
return $ingredients;
}
謝謝您的出色答案,但問題在這裏: 兩家餐廳的同一道菜有不同的配料(不同餐廳的料理可能不同) –
你應該提到,起初,生病嘗試和編輯 –
你能否提供我一個預期的例子結果,所以我可以解決並嘗試如何實現它? –