laOvel中whereOr和orWhere之间的差异

Ron*_*ser 5 php query-builder laravel eloquent

我在Laravel的代码中使用过whereOr,但有时会产生不同的结果orWhere

$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();
Run Code Online (Sandbox Code Playgroud)

whereOr和之间的区别是什么orWhere

luk*_*ter 3

他们都可以做同样的事情。但事实并非如此,因为你用whereOr错了。whereOr是一个动态的地方。这篇博文对它们进行了更深入的描述

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

->whereAge(18);
Run Code Online (Sandbox Code Playgroud)

它可以翻译成

->where('age', '=', 18);
Run Code Online (Sandbox Code Playgroud)

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

现在whereOr你实际上必须这样称呼它:

->whereAgeOrGender(18, 'male');
Run Code Online (Sandbox Code Playgroud)

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