我得到了以下实体字段:
/**
* @var array
*
* @ORM\Column(name="field", type="array", length=65535, nullable=true)
*/
private $field;
/**
* Set field
*
* @param array $field
*
* @return array
*/
public function setField($field)
{
$this->field= $field;
return $this;
}
/**
* Get field
*
* @return array
*/
public function getField()
{
return $this->field;
}
我收到一个包含以下字段的JSON:
{"field":["9031234567,9031234568,9031234569"]}
并使用Symfony序列化程序代码:
$filter = $em->getRepository('AppBundle:Filter')->findOneBy(['id' => $id]);
$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new ObjectNormalizer());
$serializer = new Serializer($normalizers, $encoders);
$serializer->deserialize($_POST['data'], Filter::class, 'json', array('object_to_populate' => $filter));
$em->persist($filter);
$em->flush();
将我的字段保存到Filter实体中。问题是在我的数据库中我得到了这个:
a:1:{i:0;s:32:"9031234567,9031234568,9031234569";} //saved as 1 string
虽然我需要这个:
a:3:{i:0;d:9031234567;i:1;d:9031234568;i:2;d:9031234569;} //every number saved in a separate string
任何想法如何解决?谢谢。
UPD 我的序列化程序返回以下内容:
["field":"AppBundle\Entity\Filter":private]=>
array(1) {
[0]=>
string(64) "903255, 345345, 46546, 46546, 46546, 46546, 46546, 46546,
46546,"
答案 0 :(得分:0)
如果要将每个字段项存储到DB,可以使用ArrayCollection反序列化json。
查看Symfony文档的this主题。
我想念你的实体注释。 如果要将数组项存储到一个记录中,可以执行以下操作:
/**
* Constructor.
*/
public function __construct()
{
$this->fields = new ArrayCollection();
}
添加方法以将项目添加到实体(已更新):
/**
* @param array $fields
* @return $this
*/
public function addFields(array $fields)
{
$this->fields = $fields;
return $this;
}
如果您想将数据存储到数据库中,您只需要:
$elementsToDb = ['12345', '67890', '1234567'];
$fields = new Field();
$fields->addFields($elementsToDb);
$this->entityManager->persist($fields);
$this->entityManager->flush($fields);
问候。