我在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之间有什么区别?

最佳答案

他们都可以做同样的事。但不是真的,因为你用错了。whereOr是动态的。在this blogpost
使用dynamic wheres,条件不仅由参数定义,而且由方法名本身定义。下面是一个例子:

->whereAge(18);

它可以被翻译成
->where('age', '=', 18);

这是通过whereOr函数完成的,该函数随后调用__call()。然后,此方法解码您调用的方法名,并将该信息保存为where条件。
现在使用dynamicWhere()时,您实际上必须这样称呼它:
->whereAgeOrGender(18, 'male');

这意味着它提供了一个简单的语法,但是比“real”要灵活得多。例如,它将始终使用whereOr运算符。所以绝对不适合你的情况。

09-25 17:18