//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,我想知道当我使用关系做左连接查询时,是否会查询两次?
如果是这样哪个性能更好?查询构建器左连接可以保存一个查询,这是我通常使用的查询
答案 0 :(得分:2)
我会说雄辩的关系要好得多,因为 -
通过使用两个查询,它简化了eloquent
模型的初始化。
如果使用连接查询,则两列可能具有相同的名称,例如id
。因此,您将明确选择列。
在PHP
侧,您可以适当地解压缩值,以便将它们委派给正确的eloquent
类。这将进一步增加执行时间并增加内存使用量,更不用说代码复杂性了。
答案 1 :(得分:1)
答案 2 :(得分:1)
您确实可以使用查询生成器(或原始SQL)一次检索多条记录,但明显的缺点是您不具备使用模型类的能力,因为查询生成器返回数组。您可能已经知道,模型不应该只是帮助您查询;除此之外,它们还很有用。
正如iCode所说(我在输入时回复),你会问自己:"为什么Laravel只加入列只做一个查询然后创建所有模型?&# 34;好吧,查询本身和PHP所需的逻辑将非常复杂,并且不值得。
最后,当Eloquent关系保存了很多查询时,就是当你在Customer
条记录中查询一堆Order
条记录时:在这种情况下,所有订单都只需要一个查询。