2012-03-12 20 views
77

User ile ilişkili bir Package vardır. Birçok kullanıcı aynı pakete başvurabilir. User, Package tanımlı olmadan bulunamaz. İlişkide User bulunmalıdır. İlişki iki yönlüdür, bu nedenle Package'un sıfır veya daha fazla kullanıcısı vardır.Doctrine 2, birçokToOne ilişkisinde nullable = false kullanamaz?

Bu gereksinimler User için ManyToOne ilişki ve user tabloda Ancak package_id Öğreti 2'de Package arasında OneToMany ilişkisi (yani, yabancı anahtar) null değerler verir yol açar. Ben nullable=false ama komutu ayarlama denedim:

php app/console doctrine:generate:entities DL --path="src" --no-backup 

ilişkisi ManyToOne için hiçbir özellik nullable olmadığını söylüyor. Neyi eksik?

class User 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\ManyToOne(targetEntity="Package", inversedBy="users") 
    */ 
    private $package; 

} 

class Package 
{ 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\OneToMany(targetEntity="User", mappedBy="package") 
    */ 
    private $users; 

} 

DÜZENLEME: çözdü.

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false") 

bu doğru olsa: Bu (çift tırnak unutmayın) yanlış olduğunu unutmayın

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false) 

cevap

142

kullanın sizin ManyToOne ilişkiye JoinColumn açıklama:

/** 
* @ORM\ManyToOne(targetEntity="Package", inversedBy="users") 
* @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false) 
*/ 
private $package; 

The ManyToOne kendisi null olamaz, çünkü belirli bir sütun ile ilgili değildir. Diğer taraftan JoinColumn, veritabanındaki sütunu tanımlar. Böylece, nullable veya benzersiz gibi "normal" özelliklerini kullanabilirsiniz!

+0

Teşekkürler, denedim ama maalesef 'package_id 'sütunu hala boş olarak işaretlendi - Evet, Varsayılan - NULL. Herhangi bir yardım çok takdir edilmektedir. – gremo

+5

Nevermind, çifte bir alıntıyı tümüyle kırmak. Bu 'nullable =' false ''yanlıştır! – gremo

+0

Veritabanını tamamen silmeyi ve yeni oluşturmayı denediniz mi? Sadece benim veritabanına bir göz attım (yukarıda belirtildiği gibi aynı JoinColumn notunu kullanarak) ve NotNull olarak işaretlendi! – Sgoettschkes