web-dev-qa-db-fra.com

Doctrine 2 ne peut pas utiliser nullable = false dans une relation manyToOne?

Un User est associé à un Package. De nombreux utilisateurs peuvent se référer au même package. User ne peut exister sans un Package défini. User devrait posséder la relation. La relation est bidirectionnelle, donc un Package ne contient aucun utilisateur ou plus.

Ces exigences conduisent à ManyToOne relation pour User et OneToMany relation de Package in Doctrine 2. Cependant package_id Dans user table (c'est-à-dire une clé étrangère) autorise null valeurs. J'ai essayé de définir nullable=false Mais la commande:

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

Dit qu'il n'y a pas d'attribut nullable pour la relation ManyToOne. Qu'est-ce qui me manque?

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 : résolu. notez svp que c'est faux (notez les guillemets doubles):

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

Bien que cela soit correct:

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

Utilisez l'annotation JoinColumn sur votre relation ManyToOne:

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

ManyToOne lui-même ne peut pas être annulé, car il ne concerne pas une colonne spécifique. JoinColumn, par contre, identifie la colonne dans la base de données. Ainsi, vous pouvez utiliser des attributs "normaux" tels que nullable ou unique!

180
Sgoettschkes