2016-09-12 2 views
0

Ich habe 2 Entitäten, Benutzer und Lizenz und eine Brücke Entität UserLicense. Die Assoziationen zwischen Benutzer und Lizenz ist ManytoMany. Ich habe die ORM-Anmerkungen wie folgt definiert, aber ich habe ein Problem. Wenn ich einen Benutzer und eine Lizenz in der DB speichere, habe ich nicht die Daten, auf die UserLicense verwiesen wird, aktualisiert.Doctrine Annotations, Bridge Entity scheint nicht zu funktionieren

User.php

/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\OneToMany(targetEntity="UserLicense", mappedBy="user_id") 
*/ 
private $id; 

LICENSE.php

/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\OneToMany(targetEntity="UserLicense", mappedBy="license_id") 
*/ 
private $id; 

UserLicense.php

/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="id") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user_id; 

/** 
* @ORM\ManyToOne(targetEntity="License", inversedBy="id") 
* @ORM\JoinColumn(name="license_id", referencedColumnName="id") 
*/ 
private $license_id; 

Was ist los?

Antwort

1

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

+0

Die Beziehung ist viele zu viele. Ein Benutzer kann viele Lizenzen haben, und eine Lizenz kann mit vielen Benutzern verknüpft werden. –

+0

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

+0

@Nicolas, es sei denn, 'UserLicence' hat zusätzliche Felder. –

Verwandte Themen