$this->model
->with(['Task'=>function($query){
$query->where($where);
}])
->alias(['__TASK__'=>'task'])
->where($where)
->removeOption('field')
->field('max(a) , sum(b) )
->find();
在关联查询时,关联查询的where条件包含BETWEEN TIME相关的时间查询,不指定alias表名,会导致报错找不到表名
源码分析:
TP框架在build sql时,会根据where查询条件调用不同的parse解析方法
BETWEEN TIME 会调用 parseBetweenTime方法 以及 parseDateTime方法
parseDateTime方法,会获取表字段类型信息。
我们习惯都给表增加表前缀,代码中都是没有表前缀的名称。
此处会以没有表前缀的名称来查找表,但是系统又不自动增加表前缀,导致找不到表的问题。
TP5.1源码:
Builder类 ->
parseDateTime()放你去过
重点部分:
$type = $this->connection->getTableInfo($table, 'type');