Owl Admin 中文文档


条件组合查询

<p>&gt; v3.0.3 新增</p> <h1>条件组合查询</h1> <p>在 <code>OwlAdmin</code> 中,可以使用 <code>ConditionBuilder</code> 组件来灵活的构建条件组合查询。</p> <h2><strong>使用</strong></h2> <h3>1. 在 <code>Model</code> 中引入 <code>ConditionBuilderScopeTrait</code></h3> <pre><code class="language-php"> use Slowlyo\OwlAdmin\Traits\ConditionBuilderScopeTrait; class User extends Model { use ConditionBuilderScopeTrait; }</code></pre> <p>&lt;br&gt;</p> <h3>2. 在需要使用条件组合查询的语句中,添加 <code>withConditionBuilder()</code> 方法`</h3> <p><code>withConditionBuilder()</code> 是在 <code>ConditionBuilderScopeTrait</code> 中实现的 <a href="https://learnku.com/docs/laravel/9.x/eloquent/12251#f97e0f">局部查询作用域</a></p> <pre><code class="language-php">User::query()-&amp;gt;withConditionBuilder()-&amp;gt;get(); // 可以传入 true , 使构建的查询字段不拼接表名 User::query()-&amp;gt;withConditionBuilder(true)-&amp;gt;get();</code></pre> <p>&lt;br&gt;</p> <h3>3. 添加 <code>ConditionBuilder</code> 组件</h3> <p>以基础的 <code>CRUD</code> 页面为例:</p> <p><code>ConditionBuilder</code> 组件的使用,请参考 <a href="https://aisuda.bce.baidu.com/amis/zh-CN/components/form/condition-builder">官方文档</a></p> <pre><code class="language-php">public function list(): Page { $crud = $this-&amp;gt;baseCRUD() -&amp;gt;filter( $this-&amp;gt;baseFilter()-&amp;gt;body([ // baseFilterConditionBuilder 方法已在基类中实现 $this-&amp;gt;baseFilterConditionBuilder()-&amp;gt;fields([ // text 类型 [ 'name' =&amp;gt; 'title', 'label' =&amp;gt; '名称', 'type' =&amp;gt; 'text', ], // 自定义类型 [ 'type' =&amp;gt; 'custom', // 设置类型为 自定义 'name' =&amp;gt; 'custom', // 字段名 'label' =&amp;gt; '自定义', // 字段标题 'operators' =&amp;gt; [ // 设置操作符 [ 'label' =&amp;gt; '自定义', // 操作符标题 'value' =&amp;gt; 'custom-op', // 操作符值 ], ], 'value' =&amp;gt; amis()-&amp;gt;TextControl(), // right 需要渲染的组件 ], ]), ]) ) -&amp;gt;columns([ // ... ]); return $this-&amp;gt;baseList($crud); }</code></pre> <p>&lt;br&gt;</p> <h2><strong>扩展</strong></h2> <p>在准备扩展前,请先确保读懂了 <code>ConditionBuilderScopeTrait</code> 的实现,以及 <code>ConditionBuilder</code> 组件的使用</p> <h3>1. 参考上述示例,添加自定义类型</h3> <p>&lt;br&gt;</p> <h3>2. 在对应的 <code>Model</code> 中,添加 <code>extraConditionBuilderQuery</code> 方法</h3> <pre><code class="language-php">class User Extends Model { use ConditionBuilderScopeTrait; /** * @param \Illuminate\Database\Query\Builder|self $query query实例 * @param array $filter 筛选项 * @param string $or 组合方式 and / or * * @return void */ public function extraConditionBuilderQuery($query, $filter, $or) { $field = data_get($filter, 'left.field'); // 获取到要查询的字段 $op = data_get($filter, 'op'); // 操作符, 对应到自定义类型中的 operators 下的某一项的 value $value = data_get($filter, 'right'); // 用户输入的值 // 根据操作符,进行自定义查询 if ($op === 'custom-op') { $query-&amp;gt;where($field, '=', $value, $or); } } }</code></pre> <p>&lt;br&gt;</p> <p>注意:</p> <ul> <li>在构建查询时,涉及循环&amp;递归,请不要在 <code>extraConditionBuilderQuery</code> 方法中进行任何io操作~</li> <li>ConditionBuilder 组件产生的数据较大,建议使用 post 请求~</li> </ul>

页面列表

ITEM_HTML