2012-03-12 15 views
77

A User è associato a uno Package. Molti utenti possono fare riferimento allo stesso pacchetto. User non può esistere senza un Package definito. User dovrebbe possedere la relazione. La relazione è bidirezionale, quindi uno Package ha zero o più utenti al suo interno.Doctrine 2 non può usare nullable = false in manyToOne relation?

Questi requisiti portano a ManyToOne relazione storia User e OneToMany rapporto di Package in dottrina 2. Tuttavia package_id in user tabella (cioè di chiave) consente null valori. Ho provato a installare nullable=false ma comando:

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

dice che non c'è nessun attributo nullable per la relazione ManyToOne. Cosa mi manca?

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; 

} 

EDIT: risolto. si prega di notare che questo è sbagliato (nota le virgolette):

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

Mentre questo è corretto:

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

risposta

142

usare l'annotazione JoinColumn sul ManyToOne relazione:

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

Il ManyToOne non può essere annullabile, perché non si riferisce a una colonna specifica. La JoinColumn identifica invece la colonna nel database. Quindi, puoi usare attributi "normali" come nullable o unici!

+0

Grazie, ho provato ma sfortunatamente la colonna 'package_id' è ancora contrassegnata come Null - Sì, Default - NULL. Ogni aiuto è molto apprezzato. – gremo

+5

Non importa, una doppia citazione completa la cosa. Questo è 'nullable =" false "' è sbagliato! – gremo

+0

Hai provato a eliminare completamente il database e a crearlo di nuovo? Ho appena dato un'occhiata al mio database (usando la stessa annotazione JoinColumn come menzionato sopra) ed è contrassegnato come NotNull! – Sgoettschkes