可翻译的学说数组字段

时间:2014-10-23 09:13:19

标签: php arrays symfony doctrine-orm translate

我有一个带有字段(类型为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

2 个答案:

答案 0 :(得分:1)

看起来您正在尝试将空字符串从数据库转换为数组。问题来自categories列。此列包含空值,而不是序列化的空数组。

一种可能的解决方案是用预期的数组替换空字符串,如下所示:

UPDATE `product` SET categories="a:0:{}" WHERE categories= "";

希望这可以提供帮助。

答案 1 :(得分:0)

我错了。当我应该使用原生{locale}时,我试图设置自己的{_locale}路线段(请注意下划线 - documentation)。

如果让symfony通过路由处理语言环境,translatable将透明地处理实体翻译(包括表单提交),并且不需要调用$entity::setTranslatableLocale()EntityManager::refresh()

无需对阵列字段进行特殊处理,它们可以无缝地进行翻译。