laOvel中whereOr和orWhere之间的差异

时间:2014-12-20 09:03:11

标签: php laravel eloquent query-builder

我在 Laravel 的代码中使用了whereOrorWhere两者都有效,但有时会产生不同的结果

$user_query = User::select( 'users.id', 'users.username','users.first_name','users.last_name', 'users.photo' )
                    ->where('users.status',1)
                    ->where('users.id','!=',$id)
                    ->where('users.username','like','%'.$searchkey.'%')
                    ->orWhere('users.first_name','like','%'.$searchkey.'%')
                    ->orwhere('users.last_name','like','%'.$searchkey.'%')->get();

                    // ->whereOr('users.first_name','like','%'.$searchkey.'%')
                    // ->whereOr('users.last_name','like','%'.$searchkey.'%')->get();

whereOrorWhere

之间有什么区别

1 个答案:

答案 0 :(得分:3)

他们可以做同样的事情。但不是真的,因为你使用whereOr错了。 whereOr是一个动态。在this blogpost

中对它们进行了更深入的描述

对于动态wheres,条件不仅定义参数,还定义方法名称本身。这是一个例子:

->whereAge(18);

可以翻译成

->where('age', '=', 18);

这是通过__call()函数完成的,然后调用dynamicWhere()。然后,此方法解码您调用的方法名称,并将该信息保存为where条件。

现在使用whereOr,您实际上必须将其称为:

->whereAgeOrGender(18, 'male');

这意味着它为您提供了简单的语法,但却不如“真实”那么灵活。例如,始终使用=运算符。所以它绝对不适合你的情况。