[英]laravel relationship query twice?
//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,我想知道何时使用关系进行左联接查询,它会查询两次吗?
如果是这样,哪个性能更好? 查询生成器左联接可以保存一个查询,这是我通常使用的查询
我会说雄辩的关系要好得多,因为-
通过使用两个查询,它简化了eloquent
模型的初始化。
如果改用联接查询,则两列可能具有相同的名称,例如id
。 因此,您将明确选择列。
在PHP
端,您将适当地解压缩值,以便可以将它们委派给正确的eloquent
类。 这将进一步增加执行时间并增加内存使用量,更不用说代码复杂性了。
实际上,您确实可以使用查询生成器(或原始SQL)一次检索许多记录,但是明显的缺点是您无法使用模型类,因为查询生成器会返回数组。 您可能已经知道,模型不仅仅可以帮助您进行查询,还可以帮助您解决问题。 它们不仅有用。
正如iCode所说(当我键入此命令时回答),您会问自己:“为什么Laravel不只是联接列只执行一个查询然后创建所有模型?” 好吧,查询本身以及工作所需的PHP逻辑将非常复杂,这是不值得的。
最后,当雄辩关系节省了大量的查询是在查询了一堆Customer
沿着他们的记录Order
记录:在这种情况下,所有的订单都采取只用一个查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.