Symfony,Doctrine 在存储到数据库之前截断 Json 中的字符串
Symfony, Doctrine truncates string in Json filed before storing in database
在 Symfony 4 应用程序中使用 Doctrine 存储数据库中的某些 Json 数据时,我遇到了一个奇怪的错误。
json 数据中的某些字符串被截断超过 27 个字符并在末尾添加 [...]
,但并非总是如此 !!
这是我在数据库中获得的数据示例:
{
"tests": {
"test-1": {
"label": "Test 1",
"someData": null,
"uid": "044e0907-82cc-4f53-a325-e62830e59523"
},
"test-2": {
"label": "Test 2",
"someData": null,
"uid": "a204b0a7-0831-4fde-976c-f3a1b0e75655"
},
"test-3": {
"label": "Test 3",
"someData": null,
"uid": "d8f457b1-67d6-4ff7-9378-6c0ce5d9de0a"
},
"test-4": {
"label": "Test 4",
"someData": null,
"uid": "5ddbd2eb-142c-4fbb-a4bc-d6 [...]" // Here is the bug !!!
},
"test-5": {
"label": "Test 5",
"someData": null,
"uid": "e2ee7a1a-e0ae-4f1d-8806-967d94ddb790"
}
}
}
我花时间调试以找到它可能出现的位置,在我刷新我的实体之前,属性 的数据没问题,但在刷新之后,有时,一些 uid(即超过 27 个字符)被截断。
$myEntity->setField($field);
$challenge->getField(); // Here the data is OK
$this->doctrine->getManagerForClass(MyEntity::class)->flush();
$challenge->getField(); // Here the data is truncated sometimes
知道这个错误可能来自哪里吗?
学说?数据库(我用MySQL)?
谢谢!
经过一番挖掘,我终于找到了这个错误,这是我的代码的错^^
解释一下,在刷新之前,我对我的数组数据进行了一些转换,使用一个 foreach 循环并将值作为参考。
所以传递给刷新函数的数据数组保留了最后一项的值作为参考。因此,当 DbalLogger 执行记录查询的操作时,它具有缩短过长字符串的 normalizeParams()
功能。
并且由于一些参数值是通过引用传递的,所以在存储到数据库之前它也被缩短了!
结论:小心在 foreach 循环中传递引用 ;)
在 Symfony 4 应用程序中使用 Doctrine 存储数据库中的某些 Json 数据时,我遇到了一个奇怪的错误。
json 数据中的某些字符串被截断超过 27 个字符并在末尾添加 [...]
,但并非总是如此 !!
这是我在数据库中获得的数据示例:
{
"tests": {
"test-1": {
"label": "Test 1",
"someData": null,
"uid": "044e0907-82cc-4f53-a325-e62830e59523"
},
"test-2": {
"label": "Test 2",
"someData": null,
"uid": "a204b0a7-0831-4fde-976c-f3a1b0e75655"
},
"test-3": {
"label": "Test 3",
"someData": null,
"uid": "d8f457b1-67d6-4ff7-9378-6c0ce5d9de0a"
},
"test-4": {
"label": "Test 4",
"someData": null,
"uid": "5ddbd2eb-142c-4fbb-a4bc-d6 [...]" // Here is the bug !!!
},
"test-5": {
"label": "Test 5",
"someData": null,
"uid": "e2ee7a1a-e0ae-4f1d-8806-967d94ddb790"
}
}
}
我花时间调试以找到它可能出现的位置,在我刷新我的实体之前,属性 的数据没问题,但在刷新之后,有时,一些 uid(即超过 27 个字符)被截断。
$myEntity->setField($field);
$challenge->getField(); // Here the data is OK
$this->doctrine->getManagerForClass(MyEntity::class)->flush();
$challenge->getField(); // Here the data is truncated sometimes
知道这个错误可能来自哪里吗?
学说?数据库(我用MySQL)?
谢谢!
经过一番挖掘,我终于找到了这个错误,这是我的代码的错^^
解释一下,在刷新之前,我对我的数组数据进行了一些转换,使用一个 foreach 循环并将值作为参考。
所以传递给刷新函数的数据数组保留了最后一项的值作为参考。因此,当 DbalLogger 执行记录查询的操作时,它具有缩短过长字符串的 normalizeParams()
功能。
并且由于一些参数值是通过引用传递的,所以在存储到数据库之前它也被缩短了!
结论:小心在 foreach 循环中传递引用 ;)