2011-07-29 29 views
7

Doktrinde isteğe bağlı OneToOne eşlemesi oluşturmaya çalışıyorum.Doctrine isteğe bağlı OneToOne eşlemesi

Tüm şehirleri ve posta kodlarını içeren bir tablo var (bu tablo değiştirilmemelidir) ve adresleri ve eşlenmiş bir şehri olan bir tablom var. Ancak bazen başlangıçta bir adres eklemek istiyorum (belki daha sonra olacak). Ama Adrese bir Şehir eklemediğimde, Adres üzerindeki ısrar bana bir Yansıma İstisnası verir çünkü “null” gibi bir nesne yoktur, bu da City nesnesi olmalıdır.

Veritabanına her zaman boş bir şehir eklemek istemiyorum, çünkü şehir tablosuna hiçbir şey eklenmemeli veya silinmemelidir.

Herhangi bir öneriniz var mı? Ya da neyi özlüyorum?

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

Olası çözümler ben kabul:

  • (yükü bir sürü neden olabilir)
  • bir oluşturma db boş şehir nesne oluşturun ve yeni oluşturulan Adres nesnelere her zaman bu atama ManyToMany bir şehirler dizisi ile ilişki, yani sıfır veya daha fazla şehir eklenebilir (Adres neslimdeki çok sayıda şehiri kısıtlayabilirim) ama sonra bir haritalama tablosuna ihtiyacım var ...

cevap

16

Sadece basit bir çok sütunlu katılmak (yani @JoinColumns) için bu işi yapmak için nullable=true

+0

açıklama @JoinColumn için herhangi bir şekilde ekleyin. Hiç şansım yok denedim ama ... –

+0

Ne yazık ki boş bir parametre ile INSERT INTO sorgusu üretir ve bir hataya neden olur: ''INSERT INTO INTO INSTILT mesaj_konversiyon (title, lastMessage_id) DEĞERLER (?,?)' Params [43]' - ikinci param (bire bir) eksik. – Athlan

+0

Benim için çalışmıyor. Nullable = true ekledim ama başarı yok. Opsiyonel olarak bire bir ilişki yapmak için zaten var mı? – skonsoft