[top-think/think]Query类添加表前缀的问题

2023-12-18 709 views
9

测试样例上传不到github,暂时先放这里

简要描述: Student belongsTo Teacher Student belongsTo Grade

belongsTo的时候都设置 setEagerlyType(0)

然后查询的时候同时使用with和hasWhere 这时候的字段会被加两次前缀,导致SQL错误

大致SQL是这个感觉

SELECT `student`.Student.*,teacher.id AS teacher__id,teacher.teacher_id AS teacher__teacher_id FROM `student` `student` INNER JOIN `grade` `Grade` ON `Student`.`grade_id`=`Grade`.`id` INNER JOIN `teacher` `teacher` ON `student`.`teacher_id`=`teacher`.`id` WHERE `Grade`.`grade_name` = 'test' 

如果这时候指定了field,并且在field里也指定了字段名,那所有的字段都会被加上两次前缀.

问题大约是在Query类里第787行附近,参数有前缀不由分说的加上了前缀, 如果在这里判断下,如果字段名已经被加上了前缀(字段中含有点号)就跳过该字段加前缀操作,应该就OK了.

回答

5

尽量不要在模型中指定field查询 因为涉及到修改器 获取器以及关联字段 避免造成未知的错误,尤其是你JOIN方式的关联查询

5

再补充一次,不要指定field 在模型输出的时候使用hidden隐藏不需要的字段即可

7

数据表中有些字段拥有大量数据,比如文章内容等, 在列表页和导出的时候如果取出这样的字段将会对内存造成挺大的消耗, 这时候除了指定字段还有什么好办法么

0

数据表设计的时候就应该垂直分表 然后用模型关联 对于列表是不需要这些字段的