关于php:Persist Doctrine ArrayCollection只包含MySQL数据库的字符串

Persist Doctrine ArrayCollection with only strings to MySQL database

我将把arraycollection类型的字段持久化到一个仅包含sting的mysql数据库中。数据库字段在ORM定义中为"array"类型,在数据库中为文本类型。

1
2
3
4
5
6
/**
 * @var ArrayCollection
 *
 * @ORM\Column(name="currencies", type="array")
 */

private $currencies;

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

1
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数组更接近数据库?像这样:

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

为什么要设置$currency属性的arraycollection?为什么不使用数组?

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


条令在插入数据库时使用php函数serialize()

提取时使用deserialize()

您可以简单地使用:echo json_encode($entity->getCurrencies());

另请参见这个问题:如何在symfony 2.0ajax应用程序中将条令实体编码为json?


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

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

从数据库加载数据后:

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