如何为Laravel 5提供多层hasMany()关系?

时间:2016-12-28 04:00:15

标签: php laravel laravel-5 model has-many

假设我有以下表格:

order
 order_id | customer_name | delivery_address        
 1        | David         | ABC Road, DEF district 
...........Some other record ..............

order_dish
order_id | dish_id | dish_name
1        | 1       | chicken wing
1        | 2       | meat pie
1        | 3       | onion ring
...........Some other record ..............

dish_ingredient
dish_id | ingredient
1       | chicken wing
1       | salt
1       | oil
2       | pork meat
2       | flour
3       | onion
...........Some other record ..............

在Laravel 5中,如果我想获得订单的所有菜肴,我可以这样做:

$order = Order::hasMany('App\OrderDish', 'order_id')->get();

有没有办法可以在一行中获得订单所需的所有成分?

1 个答案:

答案 0 :(得分:0)

是。 “has-many-through”关系提供了通过中间关系访问远程关系的便捷捷径。您可以使用模型的 hasManyThrough()方法来定义它。

首先,在订单模型中定义关系:

class Order extends Model {
  public function ingredients() {
    return $this->hasManyThrough('App\DishIngredient', 'App\OrderDish', 'order_id', 'dish_id');
  }
}

通过定义这样的关系,您将能够获得给定订单的成分:

$ingredients = $order->ingredients;