Closed NHZEX closed 5 days ago
你开启了convertNameToCamel 然后又做了一个字段映射 不是多此一举么
你开启了convertNameToCamel 然后又做了一个字段映射 不是多此一举么
column
输出是数组,不是一直不支持convertNameToCamel
么,我重新测试老版本24
是不支持自动驼峰,必须手动转换,25
版本确实支持自动转换了。这相当于BC
中断了。
而且发现另一个问题:
$result = (new AdminUser())
->alias('u')
->limit(5)
->column([
'u.id' => 'id',
'u.create_time',
'u.update_time',
'u.update_time' => 'aaaBbbCcc',
]);
var_dump($result);
结果:aaaBbbCcc
直接变为null
了
array(2) {
[0]=>
array(4) {
["id"]=>
int(1)
["createTime"]=>
int(1718970059)
["updateTime"]=>
int(1725270718)
["aaaBbbCcc"]=>
NULL
}
[1]=>
array(4) {
["id"]=>
int(2)
["createTime"]=>
int(1725291177)
["updateTime"]=>
int(1725291269)
["aaaBbbCcc"]=>
NULL
}
}
数据库查询的字段必须是下划线的 不能是驼峰
数据库查询的字段必须是下划线的 不能是驼峰
明白了,开了convertNameToCamel
别名映射也要下划线,让orm
自动转。
(new AdminUser())
->alias('u')
->limit(5)
->column([
'u.id' => 'id',
'u.create_time',
'u.update_time',
'u.update_time' => 'aaa_bbb_ccc',
]);
array(4) {
["id"]=>
int(1)
["createTime"]=>
int(1718970059)
["updateTime"]=>
int(1725270718)
["aaaBbbCcc"]=>
int(1725270718)
}
那这个更改导致column
的兼容中断如何考虑?
column
中用到驼峰手动映射都得改一遍。还有一个隐患,column
之前一直是不调用模型的类型转换的,字段随意命名是没问题的,但现在命名得考虑到冲突,多表聚合或者需要别名转换时。
例子:比如模型A和模型B都有一个status
字段,都在模型中实现各自的status
转Enum。当调用A模型的column
聚合A+B的数据特定字段(A.id => id, B.status => status),那实出结果的B.status
会被A模型的status
以为转换,那结果就是完全错了。那这种情况下定义别名时必须考虑字段不能与模型的类型转换定义冲突。
更大的隐患:
column
重命名字段行为导致意外调用当前模型类型转换的情况。column
原有的查询结果是输出原始数据,这个更新导致变化类型转换后的数据,可能会到原有代码产生破坏行为。ps:
value
方法应该也存在一样的问题。---- 原始内容 ----
触发必须条件模型:convertNameToCamel = true
结果:只要是驼峰命名都变成 null
ps:有没有考虑妥善解决更新导致频繁的兼容性中断问题,最近几个版本频繁发生🤣