Kommentare Siehe Beziehung ManyToMany, mit zusätzlichen Feldern
Sie haben die Beziehungen zwischen Entitäten zu tun, und Lehre sie verwalten. Sie sagen zu Doktrin, ich möchte eine Beziehung zwischen Benutzern und userLicences. Doctrine verwalten die Join-Spalte mit den richtigen Feldern, Standardwerte sind die meiste Zeit gut, diese Annotation kann gelöscht werden: @ORM \ JoinColumn (name = "user_id", referenzierteColumnName = "id")
Versuchen Sie Folgendes:
User.php
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/*
*@ORM\OneToMany(targetEntity="UserLicense", mappedBy="user")
*/
private $userLicence;
LICENSE.php
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/*
* @ORM\OneToMany(targetEntity="UserLicense", mappedBy="license")
*/
private $userLicence;
UserLicense.php
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="userLicence")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity="License", inversedBy="userLicence")
* @ORM\JoinColumn(name="license_id", referencedColumnName="id")
*/
private $license;
- Erste Antwort vor Kommentare ---
Wenn ich es richtig verstehe, was Sie tun wollen, müssen Sie nur eine Beziehung zwischen User und Lizenz-Setup.
Doctrine kümmern sich um die erforderliche Datenbanktabelle, um die Beziehung zu behandeln. Sie müssen sich nicht darum kümmern.
Benutzer kann viele Lizenz haben, und Lizenz kann von vielen Benutzern besessen werden, können Sie dies tun:
User.php
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
private $id;
/*
* @ORM\ManyToMany(targetEntity="License", mappedBy="user")
*/
private $licence;
Lincence.php
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/*
* @ORM\ManyToMany(targetEntity="User", ReversedBy="license")
*
*/
private $user;
Privat $ Benutzer;
Sie müssen den Setter und Getter von $ license und $ user hinzufügen, und wenn Sie einem Benutzer eine Lizenz hinzufügen, wird Doctrine die Assoziation übernehmen.
So etwas wie
$licence = new Licence();
$user->addLicence($licence);
Nach, müssen Sie spülen();
Es ist nur ein Beispiel Code, wie Sie es implementieren, hängt von Ihrer Arbeit ab.
Einige gute Ressource: https://knpuniversity.com/screencast/symfony2-ep3/many-to-many-relationship Dieses ist perfekt ManyToMany Beziehung zu verstehen
Unbedingt lesen: http://doctrine-orm.readthedocs.io/en/latest/reference/association-mapping.html
Sie haben die Lehre Fähigkeit holen = „EAGER“, um zu sehen, wenn Sie haben wollen die zugehörige Entität in einigen Fällen, und lesen Sie über ArrayCollection
Die Beziehung ist viele zu viele. Ein Benutzer kann viele Lizenzen haben, und eine Lizenz kann mit vielen Benutzern verknüpft werden. –
ich für vieleToMany ändern, aber der Punkt ist: Lassen Sie Doctrine die Beziehung verwalten, müssen Sie mit einem ORM nicht die Datenbank zu denken. – Nicolas
@Nicolas, es sei denn, 'UserLicence' hat zusätzliche Felder. –