dcat-admin

dcat-admin


列过滤器

<h1>列过滤器</h1> <p>这个功能可以给表格的列设置一个过滤器,可以更方便的根据这一列进行数据表格过滤操作</p> <p><img src="{{public}}/assets/img/screenshots/column-filter.png" alt="" /></p> <h2>字符串比较查询</h2> <pre><code class="language-php">use Dcat\Admin\Grid; // WHERE `username` = &amp;quot;$input&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Equal::make() );</code></pre> <p>上面的调用可以给 <code>username</code> 这一列的头部加上一个 <code>input</code> 类型的过滤器,点击过滤器图标展开过滤器,输入查询提交后,会对这一列执行 <code>等于</code> 查询。</p> <h3>开启字段值查询</h3> <p>这个功能可以给每一列字段的值设置一个过滤器,点击该列字段的值就可以进行数据表格过滤操作,非常方便。</p> <p>&gt; {tip} 开启此功能之后会把这个字段的原始值作为搜索内容,不会受 <code>display</code> 方法影响。</p> <pre><code class="language-php">use Dcat\Admin\Grid; // 设置为 label 或调用 display 方法不会影响查询内容 $grid-&amp;gt;ip-&amp;gt;label()-&amp;gt;filter(); // 相当于 $grid-&amp;gt;ip-&amp;gt;filter( Grid\Column\Filter\Equal::make()-&amp;gt;valueFilter() );</code></pre> <p>鼠标移动到开启了值查询功能的列上面,右边会显示一个“放大镜”图标 &lt;a href=&quot;{{public}}/assets/img/screenshots/column-value-filter-1.png&quot; target=&quot;_blank&quot;&gt; &lt;img class=&quot;img&quot; width=&quot;400px&quot; src=&quot;{{public}}/assets/img/screenshots/column-value-filter-1.png&quot;&gt; &lt;/a&gt;</p> <p>点击列之后,表头会出现“重置”按钮,点击可以取消筛选</p> <p>&lt;a href=&quot;{{public}}/assets/img/screenshots/column-value-filter-search.png&quot; target=&quot;_blank&quot;&gt; &lt;img class=&quot;img&quot; width=&quot;400px&quot; src=&quot;{{public}}/assets/img/screenshots/column-value-filter-search.png&quot;&gt; &lt;/a&gt;</p> <h4>设置值的字段名称</h4> <p>如果当前列的值并非用户想要搜索的值,可以通过以下方法更改字段名称。</p> <pre><code class="language-php">$grid-&amp;gt;model()-&amp;gt;with('user'); // 实际搜索的会是 name 字段的值 $grid-&amp;gt;username-&amp;gt;filter('name'); // 二维数组 $grid-&amp;gt;user_id-&amp;gt;filter('user.id'); // 闭包 $grid-&amp;gt;user_id-&amp;gt;filter(function () { return $this-&amp;gt;user['id']; });</code></pre> <h4>隐藏表头的筛选器图标</h4> <pre><code class="language-php">use Dcat\Admin\Grid; $grid-&amp;gt;user_id-&amp;gt;filterByValue(); // 相当于 $grid-&amp;gt;user_id-&amp;gt;filter( Grid\Column\Filter\Equal::make() -&amp;gt;valueFilter() -&amp;gt;hide() );</code></pre> <p>效果如下</p> <p>&lt;a href=&quot;{{public}}/assets/img/screenshots/column-value-filter.png&quot; target=&quot;_blank&quot;&gt; &lt;img class=&quot;img&quot; width=&quot;400px&quot; src=&quot;{{public}}/assets/img/screenshots/column-value-filter.png&quot;&gt; &lt;/a&gt;</p> <h3>其余Input表单类型过滤器</h3> <pre><code class="language-php">use Dcat\Admin\Grid; // WHERE `username` LIKE &amp;quot;%{$input}%&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Like::make() ); // WHERE `username` LIKE &amp;quot;{$input}%&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\StartWith::make() ); // WHERE `username` &amp;gt; &amp;quot;$input&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Gt::make() ); // WHERE `username` &amp;lt;= &amp;quot;$input&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Ngt::make() ); // WHERE `username` &amp;lt; &amp;quot;$input&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Lt::make() ); // WHERE `username` &amp;gt;= &amp;quot;$input&amp;quot; $grid-&amp;gt;username-&amp;gt;filter( Grid\Column\Filter\Nlt::make() );</code></pre> <h3>时间日期</h3> <p>如果字段是时间、日期相关的字段,可以使用下面的方法</p> <pre><code class="language-php">use Dcat\Admin\Grid; $grid-&amp;gt;date()-&amp;gt;filter( Grid\Column\Filter\Equal::make()-&amp;gt;date() ); $grid-&amp;gt;time()-&amp;gt;filter( Grid\Column\Filter\Like::make()-&amp;gt;time() ); $grid-&amp;gt;datetime()-&amp;gt;filter( Grid\Column\Filter\Gt::make()-&amp;gt;datetime('YYYY-MM-DD HH:mm:ss') );</code></pre> <p>&lt;a href=&quot;{{public}}/assets/img/screenshots/grid-column-filter-between.png&quot; target=&quot;_blank&quot;&gt; &lt;img class=&quot;img&quot; width=&quot;400px&quot; src=&quot;{{public}}/assets/img/screenshots/grid-column-filter-between.png&quot;&gt; &lt;/a&gt;</p> <h2>多选查询</h2> <p>假设需要在表格数据中通过 <code>status</code> 字段过滤一个或者多个状态的数据,使用多选过滤可以非常方便的实现</p> <pre><code class="language-php">use Dcat\Admin\Grid; $grid-&amp;gt;column('status', '状态')-&amp;gt;filter( Grid\Column\Filter\In::make([ 0 =&amp;gt; '未知', 1 =&amp;gt; '已下单', 2 =&amp;gt; '已付款', 3 =&amp;gt; '已取消', ]) );</code></pre> <h2>范围查询</h2> <p>假设需要通过 <code>price</code> 字段过滤出某个价格范围内的数据</p> <pre><code class="language-php">$grid-&amp;gt;column('price')-&amp;gt;filter( Grid\Column\Filter\Between::make() );</code></pre> <p>或者是时间、日期范围的过滤</p> <pre><code class="language-php">use Dcat\Admin\Grid; $grid-&amp;gt;date()-&amp;gt;filter( Grid\Column\Filter\Between::make()-&amp;gt;date() ); $grid-&amp;gt;time()-&amp;gt;filter( Grid\Column\Filter\Between::make()-&amp;gt;time() ); $grid-&amp;gt;datetime()-&amp;gt;filter( Grid\Column\Filter\Between::make()-&amp;gt;datetime() );</code></pre> <h2>指定查询字段名</h2> <p>通过<code>setColumnName</code>方法可以指定查询字段的名称</p> <pre><code class="language-php">$grid-&amp;gt;column('column')-&amp;gt;filter( Grid\Column\Filter\Equal::make()-&amp;gt;setColumnName('custom_column') );</code></pre> <h3>查询json字段</h3> <pre><code class="language-php">$grid-&amp;gt;column('column')-&amp;gt;filter( Grid\Column\Filter\Equal::make()-&amp;gt;setColumnName('json_column-&amp;gt;label') );</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-&amp;gt;column('user.name')-&amp;gt;filter( Grid\Column\Filter\Equal::make() ); $grid-&amp;gt;column('user_name')-&amp;gt;filter( Grid\Column\Filter\Equal::make()-&amp;gt;setColumnName('user.name') );</code></pre>

页面列表

ITEM_HTML