Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可翻译原则数组域_Php_Arrays_Symfony_Doctrine Orm_Translate - Fatal编程技术网

Php 可翻译原则数组域

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”

我有一个工作实体,它有一个字段(类型为ArrayCollection),该字段与doctrine映射到一个类型为array的列

现在我需要这个字段是可翻译的(条令行为),但我得到一个在获取未翻译的区域设置时无法将数据库值“”转换为条令类型数组ConversionException

如何保持阵列功能并使其可翻译


实体产品中的属性声明:
/**
*@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抱歉!