<small id='glRqp'></small><noframes id='glRqp'>

<tfoot id='glRqp'></tfoot>

    <bdo id='glRqp'></bdo><ul id='glRqp'></ul>

        <i id='glRqp'><tr id='glRqp'><dt id='glRqp'><q id='glRqp'><span id='glRqp'><b id='glRqp'><form id='glRqp'><ins id='glRqp'></ins><ul id='glRqp'></ul><sub id='glRqp'></sub></form><legend id='glRqp'></legend><bdo id='glRqp'><pre id='glRqp'><center id='glRqp'></center></pre></bdo></b><th id='glRqp'></th></span></q></dt></tr></i><div id='glRqp'><tfoot id='glRqp'></tfoot><dl id='glRqp'><fieldset id='glRqp'></fieldset></dl></div>
        <legend id='glRqp'><style id='glRqp'><dir id='glRqp'><q id='glRqp'></q></dir></style></legend>
      1. laravel 搜索多个以空格分隔的单词

        时间:2023-09-23

              <tfoot id='TO96a'></tfoot>
              <i id='TO96a'><tr id='TO96a'><dt id='TO96a'><q id='TO96a'><span id='TO96a'><b id='TO96a'><form id='TO96a'><ins id='TO96a'></ins><ul id='TO96a'></ul><sub id='TO96a'></sub></form><legend id='TO96a'></legend><bdo id='TO96a'><pre id='TO96a'><center id='TO96a'></center></pre></bdo></b><th id='TO96a'></th></span></q></dt></tr></i><div id='TO96a'><tfoot id='TO96a'></tfoot><dl id='TO96a'><fieldset id='TO96a'></fieldset></dl></div>
            1. <small id='TO96a'></small><noframes id='TO96a'>

                  <tbody id='TO96a'></tbody>
                • <bdo id='TO96a'></bdo><ul id='TO96a'></ul>
                  <legend id='TO96a'><style id='TO96a'><dir id='TO96a'><q id='TO96a'></q></dir></style></legend>
                  本文介绍了laravel 搜索多个以空格分隔的单词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  我是 laravel 查询构建器的新手,我想搜索在输入字段中输入的多个单词,例如,如果我输入jhon doe",我想获取包含 jhon 或 doe 的任何列

                  I am new to laravel query builder, I want to search multiple words entered in an input field for example if I type "jhon doe" I want to get any column that contains jhon or doe

                  我已经看到/尝试过使用 php MySQL 的解决方案,但无法适应查询构建器

                  I have seen/tried solutions using php MySQL but can't able to adapt to query builder

                  //1. exploding the space between the keywords 
                  
                  //2. using foreach apend the query together
                  
                  $query = "select * from users where";
                  
                  $keywordRaw = "jhon doe";
                  $keywords = explode(' ', $keywordRaw );
                  foreach ($keywords as $keyword){
                  $query.= " first_name LIKE '%" + $keyword +"%' OR ";
                  }
                  

                  如何使用查询构建器执行此操作

                  how do I do this using query builder

                  这是我到目前为止所拥有的,这样做的正确方法是什么,

                  this is what i have so far, what is the proper way of doing this,

                  $keywordRaw = "jhon doe";
                  //how do I explode this words and append them along with their appropriate query
                  $users = User::select('users.*')
                  ->where('first_name', 'LIKE', '%'.$keywordRaw.'%')
                  

                  请帮忙,提前致谢

                  推荐答案

                  这就是您使用 QueryBuilder 的方式,但首先要补充一些注意事项:

                  This is how you do it with QueryBuilder, but first some additional notes:

                  // user can provide double space by accident, or on purpose:
                  $string = 'john  doe';
                  
                  // so with explode you get this:
                  explode(' ', $string);
                  array(
                    0 => 'john',
                    1 => '',
                    2 => 'doe'
                  )
                  
                  // Now if you go with LIKE '%'.value.'%', you get this:
                  select * from table where name like '%john%' or name like '%%' or ...
                  

                  也就是说,您显然不能依赖 explode,因为在上述情况下,您将获得所有行.

                  That said, you obviously can't rely on explode because in the above case you would get all the rows.

                  所以,这是你应该做的:

                  So, this is what you should do:

                  $string = 'john  doe';
                  
                  // split on 1+ whitespace & ignore empty (eg. trailing space)
                  $searchValues = preg_split('/s+/', $string, -1, PREG_SPLIT_NO_EMPTY); 
                  
                  $users = User::where(function ($q) use ($searchValues) {
                    foreach ($searchValues as $value) {
                      $q->orWhere('name', 'like', "%{$value}%");
                    }
                  })->get();
                  

                  where 中有闭包,因为将 或 where 子句括在括号中是一种很好的做法.例如,如果您的 User 模型使用了 SoftDeletingScope 而您不按照我的建议去做,那么您的整个查询就会搞砸.

                  There is closure in the where because it is a good practice to wrap your or where clauses in parentheses. For example if your User model used SoftDeletingScope and you would not do what I suggested, your whole query would be messed up.

                  这篇关于laravel 搜索多个以空格分隔的单词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:如何使用 Laravel 4.1 基于 id 或对象数组执行批量删 下一篇:Laravel 在更新时更改 created_at

                  相关文章

                  最新文章

                • <legend id='eDnrw'><style id='eDnrw'><dir id='eDnrw'><q id='eDnrw'></q></dir></style></legend>
                • <i id='eDnrw'><tr id='eDnrw'><dt id='eDnrw'><q id='eDnrw'><span id='eDnrw'><b id='eDnrw'><form id='eDnrw'><ins id='eDnrw'></ins><ul id='eDnrw'></ul><sub id='eDnrw'></sub></form><legend id='eDnrw'></legend><bdo id='eDnrw'><pre id='eDnrw'><center id='eDnrw'></center></pre></bdo></b><th id='eDnrw'></th></span></q></dt></tr></i><div id='eDnrw'><tfoot id='eDnrw'></tfoot><dl id='eDnrw'><fieldset id='eDnrw'></fieldset></dl></div>

                  <small id='eDnrw'></small><noframes id='eDnrw'>

                    <bdo id='eDnrw'></bdo><ul id='eDnrw'></ul>

                  <tfoot id='eDnrw'></tfoot>