thinkphp6 自定义的查询构造器类

前景需求:在查询的 时候我们经常会有一些通用的,查询条件,但是又不想每次都填写一遍条件,这个时候就需要重写查询类(Query)

我目前使用的thinkphp版本是6.1

首先自定义CustomQuery类继承于Query

复制代码
<?php

namespace app;
use think\db\BaseQuery;
use think\db\Query;

class CustomQuery extends Query {
    // 本人的需要是,当查询用户表中的数据时,如果条件是email不为null,那么同时email也不能时空字符串
    public function whereNotNull(string $field, string $logic = 'AND'){
        $obj = parent::whereNotNull($field,$logic);
        $table = self::getTable();
        $alias = $this->getOptions('alias');

        $fields = ['email','__TABLE__.email'];
        if ($alias&&isset($alias[$table])&&!empty($alias[$table])){
            $fields[] = $alias[$table].'.email';
        }
        if (in_array($field,$fields)&&$table=='s_user'){
            $obj->where($field,'<>','');
        }
        return $obj;
    }
}

然后修改掉通用的查询类(在配置文件database.php)文件中增加

复制代码
 'query'           => CustomQuery::class,

在此处配置的原因可见下图:

注意:这种方法是替换整个模块或者整个项目中的查询类,目前还未找到某个Model的查询类替换,如有方法,请赐教

相关推荐
BBB努力学习程序设计1 分钟前
Java 21虚拟线程与平台线程:JVM层面的深度对比与实现原理
java
代码无疆4 分钟前
学点java字节码更易于理解一些特殊的java语法效果
java·后端
BBB努力学习程序设计9 分钟前
Java 8日期时间API完全指南:告别Date和Calendar的混乱时代
java
不能只会打代码16 分钟前
力扣--3433. 统计用户被提及情况
java·算法·leetcode·力扣
by__csdn16 分钟前
微前端架构:从理论到实践的全面解析
前端·javascript·vue.js·架构·typescript·vue·ecmascript
武汉唯众智创21 分钟前
职业院校C语言程序设计(AIGC版)课程教学解决方案
c语言·开发语言·aigc·程序设计·c语言程序设计·c语言程序设计实训室
知青先生22 分钟前
E9项目调试方式
java·ide
本地运行没问题23 分钟前
从零散编译到一键打包:Maven如何重塑Java构建流程
java
10km29 分钟前
java:延迟加载实现方案对比:双重检查锁定 vs 原子化条件更新
java·延迟加载·双重检查锁定
qq_4017004132 分钟前
C语言void*
c语言·开发语言