【TP5.1】 关联查询时,注意BETWEEN TIME查询

 

$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');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值