我将类型为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']
答案 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);
?>