前景需求:在查询的 时候我们经常会有一些通用的,查询条件,但是又不想每次都填写一遍条件,这个时候就需要重写查询类(Query)
我目前使用的thinkphp版本是6.1
首先自定义CustomQuery类继承于Query
<?phpnamespace 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的查询类替换,如有方法,请赐教