2017-04-12 65 views
0

我得到了以下實體領域:Symfony的串行器返回字符串,而不是數組

/** 
* @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

如果你想給每個字段項存儲到數據庫,你可以使用的ArrayCollection進行反序列化JSON。

檢查this Symfony文檔的主題。

我想念你的實體註釋。 如果你想數組項存儲到一個記錄,可以這樣做:

/** 
* Constructor. 
*/ 
public function __construct() 
{ 
    $this->fields = new ArrayCollection(); 
} 

Add方法添加項目到實體(更新)

/** 
* @param array $fields 
* @return  $this 
*/ 
public function addFields(array $fields) 
{ 
    $this->fields = $fields; 

    return $this; 
} 

當你要存儲數據到DB你只需要:

$elementsToDb = ['12345', '67890', '1234567']; 
$fields = new Field(); 
$fields->addFields($elementsToDb); 
$this->entityManager->persist($fields); 
$this->entityManager->flush($fields); 

問候。

+0

如何在我的代碼中使用此addField()方法,其中$ serializer-> deserialize()被調用? – Jack

+0

答案已經更新。 – Viktor

+1

你能提供什麼反序列化器返回? – Viktor

相關問題