2017-01-15 7 views
0

どこにでも見えますが、私の質問に対する答えが見つかりません。私は、それを実体化せずに文字列を保存するために、教義(symfony)で可能かどうか疑問に思っています。Doctrine:単一の値の配列

例として、1人のユーザーに複数のメールアドレス(1対多)があります。メールアドレスを持つ他のメタデータは保存したくありません。例えば:

<?php 
class User { 
    private $mailAddresses = array(); 
    // ... 
    public function addEmailAddress($address) { 
     $this->mailAddresses[] = $address; 
    } 
    // .... 
} 

$user = new User(); 
$user->addEmailAddress('[email protected]'); 
$user->addEmailAddress('[email protected]'); 
$addresses - $user->getEmailAddresses(); 
// $addresses is a simple array like: array('[email protected]t.com','[email protected]'); 

このpossbileようなものですか、私は1対多の関係を使用するためにUserEmailAddressEntityを作成する必要がありますか?

+0

Doctrine ORMにはエンティティが必要です。 – Cerad

答えて

0

あなただけの単純な文字列の配列が必要な場合は、arrayタイプを使用することができます

/** 
* @ORM\Column(type="array") 
*/ 
private $emailAddresses = []; 

をDoctrineはシリアライズ文字列として保存されますが、エンティティの観点から、それは配列になります。

セッターでアレイ全体を変更せずに単一の要素をさらに制御する必要がある場合は、電子メールのアドレスを追加/管理する方法(例:addEmailAddress())を自由に作成できます。

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#array-types

0

あなたのケースでは、アレイやデータ型のどちらのインデックスを保存することは必須ではありませんので、私はそうuが直列化を必要としない、代わりに配列のsimple_arrayを使用すると思います。そしてsimple_arrayは、基本的にはちょうど

implode(',', $array); 

ですから、照会するのは非常に簡単であるDBにプレーン昏睡分離した電子メールを取得しますです。より少ないスペース、不必要なシンボル、少し速い操作。

fields: 
    [...] 
    emails: 
     type: simple_array 
    [...] 

何らかの理由によりあなた自身がコメントを追加するテーブルを作っている場合は、 "(DC2Type:simple_array)" へのごYAMLを使用している場合

/** 
* @ORM\Column(type="simple_array") 
*/ 

のか:

エンティティのアノテーションは次のようになります電子メール列。

連想配列を格納する必要がある場合は、simple_arrayの代わりに配列を使用することを検討してください。

関連する問題