2017-04-12 21 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(); 

フィールドをフィルタエンティティに保存します。それを修正する方法任意のアイデア

a:3:{i:0;d:9031234567;i:1;d:9031234568;i:2;d:9031234569;} //every number saved in a separate string 

:私はこれを必要としながら、

a:1:{i:0;s:32:"9031234567,9031234568,9031234569";} //saved as 1 string 

:問題は私のDBに私はこれを取得することですか?ありがとうございました。

UPD私のシリアライザは、次の値を返します。

["field":"AppBundle\Entity\Filter":private]=> 
array(1) { 
[0]=> 
string(64) "903255, 345345, 46546, 46546, 46546, 46546, 46546, 46546, 
46546," 

答えて

0

あなたがDBに各フィールド項目を保存したい場合は、JSONをデシリアライズするためのArrayCollectionを使用することができます。

symfonyのドキュメントthisのトピックを確認してください。

私はあなたのエンティティ注釈が不足しています。 あなたがこれを行うことが可能に一つのレコードの中に配列項目を保存する場合:あなたはデータを保存したい場合は

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

    return $this; 
} 

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

エンティティ(更新)に項目を追加するためのメソッドを追加しますあなたが必要とするDBに:

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

よろしくおねがいします。

+0

そして、$ serializer-> deserialize()が呼び出された私のコードで、このaddField()メソッドを使う方法は? – Jack

+0

回答が更新されました。 – Viktor

+1

デシリアライザの返品について教えてください。 – Viktor

関連する問題