繁体   English   中英

laravel关系查询两次?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM