2011-07-29 21 views
7

DoctrineでオプションのOneToOneマッピングを作成しようとしています。DoctrineオプションのOneToOneマッピング

私にはすべての都市と郵便番号が利用可能なテーブルがあります(このテーブルは変更しないでください)。住所とマップされた都市のテーブルがあります。しかし、時には私は最初に都市を私の住所に追加したくない(おそらく後でそれが起こる)。しかし、私はアドレスに都市を追加しないと、AddressオブジェクトはCityオブジェクトでなければならない 'null'のようなオブジェクトがないので、Addressの永続性が私にReflection Exceptionを与えます。

都市のテーブルに何も追加したり削除したりする必要がないので、空の都市を毎回データベースに追加したくありません。

提案がありますか?それとも私は何が欠けていますか?私はと考え

class Address{ 
/** 
* @OneToOne(targetEntity="City") 
* @JoinColumn(name="city_id", referencedColumnName="id") 
*/ 
    private $city = ''; 

考えられる解決策:

  • 作成
  • (多くのオーバーヘッドが発生する場合があります)デシベルで、空の街オブジェクトを作成し、新しく作成されたAddressオブジェクトに常にこれを割り当てます都市の配列とManyToMany関係があるので、0個以上の都市を追加することができます(私は自分のAddressオブジェクト内の都市の数を制限できます)が、マッピングテーブルが必要です。

答えて

16

は、単に複数列に参加(すなわち@JoinColumns)のためにこの作品を作るためにnullable=true

+0

注釈@JoinColumnにどのような方法を追加します。私は試しましたが、運が無ければ... –

+0

残念なことに、空のパラメータでINSERT INTOクエリを生成し、エラーが発生します。 2番目のパラメータ(1対1)がありません。 – Athlan

+0

それは私のためには機能しません。 nullable = trueを追加しましたが、成功しませんでした。とにかくoptionnalとして1対1の関係を作ることはありますか? – skonsoft

関連する問題