在Laravel中指定模型关系

时间:2014-07-31 03:43:04

标签: php laravel eloquent

指定一个模型与另一个模型之间的关系有什么意义。例如,laravel php框架有方法hasOne,hasMany,belongsTo等... 它们的基本功能是什么?如果忽略这些功能会产生什么后果? 我只是laravel的初学者,希望扩展我的知识。提出这么简单的问题,请不要把我钉在十字架上。我做过研究,但不太明白这个概念。

1 个答案:

答案 0 :(得分:1)

Laravel的内置模型扩展了名为ORM(对象关系映射)的概念,它基本上将一个类直接映射到数据库中的表。

数据库表是基于关系连接的,例如Order中的一个记录属于一个Customer,而一个Customer可能有多个Order。可以使用关系方法(hasOnehasMany等)在Eloquent中定义这些关系,以告诉Eloquent如何查询其他表,这样您就不必手动查询它们。

举例说明。

  

向我提供客户John创建的所有订单(客户ID:1001)

// Using QueryBuilder
$orders = Order::where('customer_id', 1001)->get();

// Using Eloquent
// Assuming relationship has been defined
$orders = Customer::findOrFail(1001)->orders;
  

稍微复杂的案例:       给我John创建的所有订单中包含的所有项目。

// Using QueryBuilder
$orders = Order::where('customer_id', 1001)->get();
$orderIDs = array_pluck('id', $orders->toArray());
$items = Item::whereIn('order_id', $orderIDs)->get();

// Eloquent
$items = Customer::findOrFail(1001)->orders->items;

正如您所看到的那样,通过定义关系,您可以从手动查询每个相关记录中解脱出来。但是,重要的是要知道在速度/性能可能受到关注时,您可能希望使用QueryBuilder手动查询条目。