我有一个带有字段(类型为ArrayCollection)的工作实体,该字段使用doctrine映射到array类型的列。
现在我需要这个字段可以翻译(学说行为)但我得到无法转换数据库值""获取未翻译的语言环境时,为Doctrine Type数组 ConversionException。
如何保持阵列功能并使其可翻译?
/**
* @var ArrayCollection
*
* @Gedmo\Translatable
* @ORM\Column(name="categories", type="array")
*/
private $categories;
// ... Controller ProductController nitty gritty
public function showAction(Request $request, $id, $locale)
{
// omitted stuff, load $product by $id
$product->setTranslatableLocale($locale); // load translations
$em->refresh($product);
return $this->render('AcmeExampleBundle:Product:show.html.twig', [
'product' => $product
]);
}
ConversionException
无法转换数据库值""到Doctrine Type数组
异常堆栈跟踪: pastebin
答案 0 :(得分:1)
看起来您正在尝试将空字符串从数据库转换为数组。问题来自categories
列。此列包含空值,而不是序列化的空数组。
一种可能的解决方案是用预期的数组替换空字符串,如下所示:
UPDATE `product` SET categories="a:0:{}" WHERE categories= "";
希望这可以提供帮助。
答案 1 :(得分:0)
我错了。当我应该使用原生{locale}
时,我试图设置自己的{_locale}
路线段(请注意下划线 - documentation)。
如果让symfony通过路由处理语言环境,translatable将透明地处理实体翻译(包括表单提交),并且不需要调用$entity::setTranslatableLocale()
或EntityManager::refresh()
。
无需对阵列字段进行特殊处理,它们可以无缝地进行翻译。