Php 可翻译原则数组域
我有一个工作实体,它有一个字段(类型为ArrayCollection),该字段与doctrine映射到一个类型为array的列 现在我需要这个字段是可翻译的(条令行为),但我得到一个在获取未翻译的区域设置时无法将数据库值“”转换为条令类型数组ConversionException 如何保持阵列功能并使其可翻译Php 可翻译原则数组域,php,arrays,symfony,doctrine-orm,translate,Php,Arrays,Symfony,Doctrine Orm,Translate,我有一个工作实体,它有一个字段(类型为ArrayCollection),该字段与doctrine映射到一个类型为array的列 现在我需要这个字段是可翻译的(条令行为),但我得到一个在获取未翻译的区域设置时无法将数据库值“”转换为条令类型数组ConversionException 如何保持阵列功能并使其可翻译 实体产品中的属性声明: /** *@var数组集合 * *@Gedmo\translateable *@ORM\Column(name=“categories”,type=“array”
实体产品中的属性声明:
/**
*@var数组集合
*
*@Gedmo\translateable
*@ORM\Column(name=“categories”,type=“array”)
*/
私人类别;
控制器操作:
/。。。控制器产品控制器实体
公共函数showAction(请求$Request,$id,$locale)
{
//省略的内容,按$id加载$product
$product->SetTranslateableLocale($locale);//加载翻译
$em->刷新($product);
返回$this->render('AcmeExampleBundle:Product:show.html.twig'[
“产品”=>$product
]);
}
例外情况: 转换异常 无法将数据库值“”转换为条令类型数组
异常堆栈跟踪:看起来您正在尝试将空字符串从数据库转换为数组。问题来自
类别
列。此列包含空值,而不是序列化的空数组
一种可能的解决方案是用预期的数组替换空字符串,如下所示:
UPDATE `product` SET categories="a:0:{}" WHERE categories= "";
希望这能有所帮助。我错了。我试图设置自己的
{locale}
路由段,而我本应该使用本机{u locale}
(注意下划线-)
如果让symfony通过路由处理区域设置,则将透明地处理实体转换(包括表单提交),并且无需调用$entity::setTranslateableLocale()
或EntityManager::refresh()
无需对数组字段进行特殊处理,它们可以直接无缝转换。谢谢您的回答。是的,例外情况相当清楚。在从数据库中获取具有未翻译字段的实体的情况下,我不明白我为什么要执行任何写入操作…@Phil Thomas如果这解决了您的问题,请接受Blackishop的回答抱歉,从您的评论中,我认为答案解决了您的问题:D抱歉!