laravel关系查询两次?

时间:2016-12-13 14:08:24

标签: php laravel

//Eloquent relationship 
$customer = App\Customer::find($id); //1s query
return $orders = $customer->orders(); //2nd query

class 
public function orders() {
     return $this->hasMany('App\Order', 'customer_id')->get();
}

//Query builder, only query once
$data = DB::table('customers')
      ->select('orders.name...')
      ->leftJoin('orders', 'customers.id', '=', 'orders.customer_id')
      ->get();

我正在学习laravel,我想知道当我使用关系做左连接查询时,是否会查询两次?

如果是这样哪个性能更好?查询构建器左连接可以保存一个查询,这是我通常使用的查询

3 个答案:

答案 0 :(得分:2)

我会说雄辩的关系要好得多,因为 -

通过使用两个查询,它简化了eloquent模型的初始化。

如果使用连接查询,则两列可能具有相同的名称,例如id。因此,您将明确选择列。

PHP侧,您可以适当地解压缩值,以便将它们委派给正确的eloquent类。这将进一步增加执行时间并增加内存使用量,更不用说代码复杂性了。

答案 1 :(得分:1)

答案 2 :(得分:1)

您确实可以使用查询生成器(或原始SQL)一次检索多条记录,但明显的缺点是您不具备使用模型类的能力,因为查询生成器返回数组。您可能已经知道,模型不应该只是帮助您查询;除此之外,它们还很有用。

正如iCode所说(我在输入时回复),你会问自己:"为什么Laravel只加入列只做一个查询然后创建所有模型?&# 34;好吧,查询本身和PHP所需的逻辑将非常复杂,并且不值得。

最后,当Eloquent关系保存了很多查询时,就是当你在Customer条记录中查询一堆Order条记录时:在这种情况下,所有订单都只需要一个查询。