Ich habe google für Stunden jetzt gesucht und ich kann nicht scheinen, die Antwort zu finden, die ich suche. In Symfony2 versuche ich Criteria :: create() zu verwenden und auf eine Saison zu filtern, und es funktioniert nicht. Hier ist die vollständige Erklärung:symfony2 Filtern nach verwandten Entitäten mit Entitäten
Ich habe 4 Entitäten: Benutzer, UserPolicy, Rolle und Saison. UserPolicy implementiert das RoleInterface und User implementiert das UserInterface.
User.php
class User implements UserInterface, \Serializable {
/**
* @OneToMany(targetEntity="UserPolicy", mappedBy="User", cascade={"persist", "remove"})
*/
private $Polocies;
}
UserPolicy.php
Role.php
class Role{
/**
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @Column(name="role", type="string", length=50)
*/
private $Role;
/**
* @Column(name="label", type="string", length=50)
*/
private $Label;
/**
* @ManyToOne(targetEntity="Role")
* @JoinColumn(name="parentId", referencedColumnName="id", nullable=true)
*/
private $Parent;
}
Beachten Sie die $ Saison Variable auf der UserPolicy.
Jedes Jahr wird es eine neue Saison geben, und die Benutzer werden eine neue Reihe von Richtlinien erhalten, die die Richtlinien der Vorsaison beibehalten.
In User.php muss ich getRoles() aufrufen, was funktioniert und ich kann die UserPolicies bekommen, die die Rollen an sie gebunden haben und das funktioniert auch.
Das Problem wird eingeführt, wenn ich auf den Jahreszeiten filtern muss. Ich fand die Kriterien Klasse:
$criteria = Criteria::create()
->where(Criteria::expr()->eq("Season", "1"));
Aber weil Saison ein Objekt ist, erhalte ich die Fehler
Cannot match on AppBundle\Entity\UserPolicy::Season with a non-object value. Matching objects by id is not compatible with matching on an in-memory collection, which compares objects by reference.
Wie kann ich die Saison Objekt holen, wenn ich nicht soll ich in der Lage sein andere Daten in der Benutzereinheit laden? Ich weiß nicht, wie ich das Saisonobjekt passieren soll. Ich habe sogar einen Dienst erstellt, um auf das Saisonobjekt zuzugreifen, aber ich kann nicht auf die Funktion get() innerhalb der Entität zugreifen. HILFE!
Die Optionen 2 und 3 sind hilfreich, aber das Problem ist auf der getRoles, die für die Benutzeroberfläche erforderlich ist. Ich kann keine Repository-Methode innerhalb der Entität verwenden und keine andere Entität innerhalb einer Entität abrufen. – chollan
In diesem Fall denke ich, die einfachste Lösung wäre, mit Option eins zu gehen und die Richtlinien in 'getRoles()' Methode zu filtern. Wenn Sie nicht wissen, wie viele dieser Richtlinien, wird es kein Problem sein, die Leistung. –
Ich mag Option eins und es macht viel Sinn.Bei der Implementierung merke ich jedoch, dass das If von 1 hart codiert war. Gibt es eine Möglichkeit, auf eine globale Variable zuzugreifen, in die ich die Saison seit ihrer eigenen Einheit einfügen könnte? – chollan