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

相关推荐
今天AI了吗1 天前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
kyriewen1 天前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
TELL5211 天前
selenium webdriver 第二次初始化的异常
开发语言·python
动词ing1 天前
【C语言】自定义函数+指针入门
c语言·开发语言·算法
重生之后端学习1 天前
283. 移动零[简单]✅
开发语言·数据结构·算法·leetcode·职场和发展
吠品1 天前
Wine 在 Linux 上运行 Windows 软件完整指南
java·linux·服务器
动词ing1 天前
【C语言】结构体+文件基础
c语言·开发语言·数据结构
caimouse1 天前
ReactOS 窗口系统分析(7):分层窗口与绘制辅助 — layered.c + draw.c
c语言·开发语言
亚历克斯神1 天前
智能搜索系统的升级复盘——从 Elasticsearch 到混合检索的检索质量提升
java·spring·微服务