表格快捷搜索
<h1>表格快捷搜索</h1>
<p>快捷搜索是除了<code>filter</code>之外的另一个表格数据搜索方式,用来快速过滤你想要的数据,开启方式如下:</p>
<pre><code class="language-php">$grid-&gt;quickSearch();
// 设置表单提示值
$grid-&gt;quickSearch()-&gt;placeholder('搜索...');</code></pre>
<p>这样表头会出现一个搜索框:
<a href="{{public}}/assets/img/screenshots/grid-quick-search.png" target="_blank">
<img style="box-shadow:0 1px 6px 1px rgba(0, 0, 0, 0.12)" width="100%" src="{{public}}/assets/img/screenshots/grid-quick-search.png">
</a></p>
<p>通过给<code>quickSearch</code>方法传入不同的参数,来设置不同的搜索方式,有下面几种使用方法</p>
<h2>Like搜索</h2>
<p>第一种方式,通过设置字段名称来进行简单的like查询</p>
<pre><code class="language-php">$grid-&gt;quickSearch('title');
// 提交后模型会执行下面的查询
$model-&gt;where('title', 'like', &quot;%{$input}%&quot;);</code></pre>
<p>或者对多个字段做like查询:</p>
<pre><code class="language-php">$grid-&gt;quickSearch('title', 'desc', 'content');
// 或
$grid-&gt;quickSearch(['title', 'desc', 'content']);
// 提交后模型会执行下面的查询
$model-&gt;where('title', 'like', &quot;%{$input}%&quot;)
-&gt;orWhere('desc', 'like', &quot;%{$input}%&quot;)
-&gt;orWhere('content', 'like', &quot;%{$input}%&quot;);</code></pre>
<h3>关联关系</h3>
<p>如果安装了 <a href="https://github.com/jqhph/laravel-wherehasin">dcat/laravel-wherehasin</a>,则会优先使用<code>whereHasIn</code>方法进行查询操作</p>
<pre><code class="language-php">$grid-&gt;quickSearch('user.name', 'user.username', 'content');</code></pre>
<h2>自定义搜索</h2>
<p>第二种方式可以让你更灵活的控制搜索条件</p>
<pre><code class="language-php">$grid-&gt;quickSearch(function ($model, $query) {
$model-&gt;where('title', $query)-&gt;orWhere('desc', 'like', &quot;%{$query}%&quot;);
});</code></pre>
<p>其中闭包的参数<code>$query</code>为你填入搜索框中的内容,提交之后进行闭包中的查询。</p>
<h2>快捷语法搜索</h2>
<p>第三种方式参考了<code>Github</code>的搜索语法,来进行快捷搜索,调用方式:</p>
<pre><code class="language-php">// 不传参数
$grid-&gt;quickSearch();</code></pre>
<p>填入搜索框的内容按照以下的语法,在提交之后会进行相应的查询 :</p>
<h3>比较查询</h3>
<p><code>title:foo</code> 、<code>title:!foo</code></p>
<pre><code class="language-php">$model-&gt;where('title', 'foo');
$model-&gt;where('title', '!=', 'foo');</code></pre>
<p><code>rate:&gt;10</code>、<code>rate:&lt;10</code>、<code>rate:&gt;=10</code>、<code>rate:&lt;=10</code></p>
<pre><code class="language-php">$model-&gt;where('rate', '&gt;', 10);
$model-&gt;where('rate', '&lt;', 10);
$model-&gt;where('rate', '&gt;=', 10);
$model-&gt;where('rate', '&lt;=', 10);</code></pre>
<h3>In、NotIn查询</h3>
<p><code>status:(1,2,3,4)</code>、<code>status:!(1,2,3,4)</code></p>
<pre><code class="language-php">$model-&gt;whereIn('status', [1,2,3,4]);
$model-&gt;whereNotIn('status', [1,2,3,4]);</code></pre>
<h3>Between查询</h3>
<p><code>score:[1,10]</code></p>
<pre><code class="language-php">$model-&gt;whereBetween('score', [1, 10]);</code></pre>
<h3>时间日期函数查询</h3>
<p><code>created_at:date,2019-06-08</code></p>
<pre><code class="language-php">$model-&gt;whereDate('created_at', '2019-06-08');</code></pre>
<p><code>created_at:time,09:57:45</code></p>
<pre><code class="language-php">$model-&gt;whereTime('created_at', '09:57:45');</code></pre>
<p><code>created_at:day,08</code></p>
<pre><code class="language-php">$model-&gt;whereDay('created_at', '08');</code></pre>
<p><code>created_at:month,06</code></p>
<pre><code class="language-php">$model-&gt;whereMonth('created_at', '06');</code></pre>
<p><code>created_at:year,2019</code></p>
<pre><code class="language-php">$model-&gt;whereYear('created_at', '2019');</code></pre>
<h3>Like查询</h3>
<p><code>content:%Laudantium%</code>、<code>content:Laud%</code></p>
<pre><code class="language-php">$model-&gt;where('content', 'like', '%Laudantium%');
$model-&gt;where('content', 'like', 'Laud%');</code></pre>
<h3>正则查询</h3>
<p><code>username:/song/</code></p>
<p>> {tip} 这里请使用MYSQL正则语法</p>
<pre><code class="language-php">$model-&gt;where('username', 'REGEXP', 'song');</code></pre>
<h3>多条件组合搜索</h3>
<p>用空格隔开多个搜索语句就可以实现多个字段的AND查询,比如<code>username:%song% status:(1,2,3)</code>, 提交之后会运行下面的搜索</p>
<pre><code class="language-php">$model-&gt;where('username', 'like', '%song%')-&gt;whereIn('status', [1, 2, 3]);</code></pre>
<p>如果某一个条件是<code>OR</code>查询, 只需要在语句单元前增加一个|符号即可: <code>username:%song% |status:(1,2,3)</code></p>
<pre><code class="language-php">$model-&gt;where('username', 'like', '%song%')-&gt;orWhereIn('status', [1, 2, 3]);</code></pre>
<p>> {tip} 如果填入的查询文字中包含空格,需要放在双引号里面:<code>updated_at:&quot;2019-06-08 09:57:45&quot;</code></p>
<h3>Label作为查询字段名称</h3>
<p>不方便得到字段名的情况下,可以直接使用label名称作为查询字段</p>
<pre><code class="language-php"> // 比如设置了`user_status`的表头列名为`用户状态`
$grid-&gt;column('user_status', '用户状态');</code></pre>
<p>那么可以填入<code>用户状态:(1,2,3)</code>来执行下面的查询</p>
<pre><code class="language-php">$model-&gt;whereIn('user_status', [1, 2, 3]);</code></pre>
<h2>禁止自动提交</h2>
<p>快捷搜索默认是开启自动提交功能的,如果你不需要自动提交,可以通过以下方式禁用这个功能</p>
<p>> {tip} 禁用了自动提交功能之后需要通过按回车(<code>Enter</code>)键进行搜索。</p>
<pre><code class="language-php">$grid-&gt;quickSearch()-&gt;auto(false);</code></pre>