Symfony2-Form-Builder, Wählen Sie Über Join-Tabelle mit Metadaten
Habe ich 3 Personen:
[Member] ----OneToMany----> [MemberCategory] ---ManyToOne---> [Category]
Dies funktioniert auch so weit wie abrufen von Ergebnissen aus der Datenbank, aber ich kann nicht das Formular-generator zu bauen, eine richtige Formular-Steuerelemente.
Möchte ich eine Liste aller Kategorien mit Kontrollkästchen, die ausgewählt werden die Kategorien, die verwendet werden, von den Mitgliedstaaten. Schließlich möchte ich hinzufügen, dass das Feld Priorität.
Mitglied
class Member
{
protected $id;
@ORM\OneToMany(targetEntity="MemberCategory", mappedBy="member")
protected $categories;
}
Kategorie
class Category
{
protected $id;
@ORM\Column(name="category_name", type="string", length=50, nullable=false, unique=true)
private $categoryName;
}
MemberCategory
class MemberCategory
{
@ORM\Id
@ORM\ManyToOne(targetEntity="Member")
@ORM\JoinColumns({
@ORM\JoinColumn(name="member_id", referencedColumnName="id", onDelete="CASCADE")
private $member;
@ORM\Id
@ORM\ManyToOne(targetEntity="Category")
@ORM\JoinColumns({
@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")
private $category;
@ORM\Column(name="priority", type="integer", nullable=true)
protected $priority;
}
Offensichtlich versucht, mit dem Formular-builder, die nicht arbeiten.
Wenn ich:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:Category',
'property' => 'categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
Bekomme ich eine wählen Sie mit den Kategorien, aber keiner von denen ausgewählte in MemberCategory für dieses Mitglied.
Wenn ich:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:MemberCategory',
'property' => 'category.categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
Erhalte ich alle ausgewählten Kategorien für alle Benutzer.
Weiß jemand, wie man diese zu arbeiten, dies ist offensichtlich ein gemeinsames Muster in relationalen Daten und wäre leicht mit SQL und PHP.
Ist es ein straight forward Lösung in Symfony 2.3 und Lehre?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie ich dieses problem gelöst, in der Vergangenheit (angewendet auf dein Beispiel), aber dies ist, was ich herausgefunden habe, so ist es vielleicht nicht 100% die richtige für Ihren Fall.
Erstellen Sie zuerst eine
MemberCategory
form geben, passend zu Ihrem Bedarf:Fügen Sie diesem Formular geben Sie in Ihrem
Member
Typ form:Dann können Sie die Dokumentation und fügen Sie so viele Kategorien wie Sie wollen, um Ihre Mitglieder und die Zuweisung einer Priorität zu jeder Zeit.
Benötigen Sie den querybuilder in Ihrem Formular
Finden Sie in der Dokumentation für die ordnungsgemäße Verwendung.
sehen symfony2 form querybuilder mit Parametern für eine exmple
Den posten des cheesemacfly ist nicht so schlimm, aber es ist call embeded form und kann schwierig sein zu verwalten.
In der Tat, Sie jus benötigen zum erstellen einer "Custom-Repositories"
http://symfony.com/doc/current/book/doctrine.html#custom-repository-classes
Es wird ein neues Verfahren zum "greifen" Ihre ORM-Objekt mit Doctrine2 wie find() oder findBy();
1) Erstellen Sie ein neues repository im Repository-Ordner der Bundles
}
2), die an Ihre Individuelle repository zu Ihrer Person
3) fügen Sie einen Konstruktor der Form-Klasse auf und übergeben de Entity-Manager und die variable benötigt, um Ihre Abfrage :
4) Im controller, erstellen Sie Ihr Formular wie dieses :
Fühlen Sie sich frei, mir Fragen zu stellen, ich hoffe das ist was du suchst 😉