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)
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!