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的查询类替换,如有方法,请赐教

相关推荐
会编程的土豆几秒前
Go语言零基础入门:从0到能写程序(超详细版)
开发语言·后端·golang
itzixiao1 分钟前
L1-058 6翻了(15分)[java][python]
java·开发语言·python·算法
晓得迷路了3 分钟前
栗子前端技术周刊第 126 期 - Rspack 2.0、TypeScript 7.0 Beta、Git 2.54...
前端·javascript·ai编程
nLYA SCOL3 分钟前
MySQL数据的增删改查(一)
android·javascript·mysql
小小码农Come on4 分钟前
单例 QtObject 全局配置
开发语言·前端·javascript
hakesashou5 分钟前
python如何保存img文件
开发语言·python
直奔標竿7 分钟前
Java开发者AI转型第十三课!知识库终局方案:Spring AI Vector Store架构演进与ETL全链路入库实战
java·人工智能·后端·spring
MarkHD8 分钟前
调度、监控与部署:Python自动化任务全栈实践
开发语言·python·自动化
XiYang-DING8 分钟前
【Java EE】阻塞队列(BlockingQueue)
java·java-ee
山甫aa9 分钟前
多叉树定义与遍历-----从零开始的数据结构
开发语言·c++·二叉树·多叉树