坚持Doctrine ArrayCollection只包含MySQL数据库的字符串

时间:2014-09-25 14:50:10

标签: php mysql json symfony doctrine-orm

我将类型为ArrayCollection的字段保存到只包含stings的MySQL数据库中。数据库字段的类型为" array"在ORM定义中和数据库中的TEXT类型。

/**
 * @var ArrayCollection
 *
 * @ORM\Column(name="currencies", type="array")
 */
private $currencies;

当持久化时,它在数据库中看起来像这样:

O:43:"Doctrine\Common\Collections\ArrayCollection":1:{s:54:"Doctrine\Common\Collections\ArrayCollection_elements";a:3:{i:0;s:3:"EUR";i:1;s:3:"USD";i:2;s:3:"GBP";}}

有没有办法让json数组更接近数据库?像这样:

['EUR', 'USD', 'GBP']

3 个答案:

答案 0 :(得分:1)

为什么要为$ currency属性设置ArrayCollection? 为什么不使用阵列?

您也可以使用" json_array" Doctrode类型而不是" array"。

答案 1 :(得分:0)

Doctrine在插入数据库时​​使用PHP函数serialize()

提取后,它使用deserialize()

您只需使用:echo json_encode($entity->getCurrencies());

另请参阅此问题:How to encode Doctrine entities to JSON in Symfony 2.0 AJAX application?

答案 2 :(得分:-2)

在将内容保存到数据库之前:

<?php
    $field = json_encode($array);
?>

从数据库加载数据后:

<?php
    $array = json_decode($field, true);
?>