我想知道使用查询生成器函数中的 Laravel 新条件语句 when()
的效率/性能。
它们是否比简单的变量条件更有效?
示例:我正在使用一些单选框和复选框过滤结果,它们会提供许多条件,我想知道应用它们的最有效方法:
简单条件:
if($request->has('sale')) $query = $query->sale();
Laravel 条件语句:
query->when($request->has('sale'), function ($query){
return $query->sale();
})
提前致谢,干杯。
文档: https://laravel.com/docs/5.2/queries#conditional-statements
最佳答案
长话短说: when
功能只不过是syntactic sugar .它并不比常规条件更有效率,而且(可能)效率不低到令人担忧的地步。
让我们看看 when
method's source code :
public function when($value, $callback)
{
$builder = $this;
if ($value) {
$builder = call_user_func($callback, $builder);
}
return $builder;
}
如您所见,when
方法与 if (<your conditional>)
没有任何不同然后调用您提供的回调函数。
因为它与您的简单条件示例完全相同,所以它效率再高不过了。它的效率可能会略微降低,因为它涉及两个额外的方法调用——但是,这将非常微不足道,我不担心任何性能影响。如果您关心效率,则应该分析这两种实现,并且仅在它被证明是瓶颈时才进行优化。
when
的真正原因函数的存在是syntactic sugar .它允许您有条件地向查询添加新约束,而不会破坏 QueryBuilder
的流畅界面:
$q = $q
->when(isset($foo), function() use ($foo) { return $q->where('foo', $foo); })
->when(isset($bar), function() use ($bar) { return $q->where('bar', $bar); })
->when(isset($baz), function() use ($baz) { return $q->where('baz', $baz); });
相对于
if (isset($foo)) {
$q = $q->where('foo', $foo);
}
if (isset($bar)) {
// ...
在某些情况下,这可能被证明更易读(或更难读)。到底要不要用when()
或者一个简单的条件,无非是个人品味。
关于php - Laravel 条件语句 : is when() efficient?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38661384/