模型中使用了软删除后再使用表别名时delete_time的表名为全名

浏览:845 发布日期:2017/02/18 分类:求助交流 关键字: 软删除 别名
BUG简述:
启用软删除的模型中,使用alias指定别名后,软删除字段的别名无效,仍然为表全名,导至查询时出现无法查找到字段的错误。
BUG分析:
模型软删除取软删除字段时,加上'__TABLE__'做别名替换,如下图:
SoftDelete.php

而在Query.php中,alias指定别名时,将'__TABLE__'替换成了表名,这时$this->options['alias']['表名']=别名,也就是说$this->options['alias']数组里是没有$this->options['alias']['__TABLE__']的,如下图:

但是在最后的parseKey字段和表名处理时,软删除之前的字段别名一直没有变化还是字符'__TABLE__',这时又重新取表全名替换'__TABLE__',所以最终,软删除字段的别名为表全名,而非之前用alias指定的别名,如下图:


临时简要解决:
在Query.php第1520行$this->options['alias'][$table] = $alias;下增加一行$this->options['alias']['__TABLE__'] = $alias;,目的是为了能让parseKey方法查询到'__TABLE__'的别名,如图:


最佳答案
评论( 相关
后面还有条评论,点击查看>>