前景需求:在查询的 时候我们经常会有一些通用的,查询条件,但是又不想每次都填写一遍条件,这个时候就需要重写查询类(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的查询类替换,如有方法,请赐教