搜索
系统检测到您的用户名不符合规范:

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

浏览:891 发布日期: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__'的别名,如图:


最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
liujiawm
积分:3048 等级:LV4
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /