Ich habe drei einfache Entitäten.Viele bis viele Assoziationen mit 3 teilnehmenden Klassen - Formulargenerierung
class Product {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="ProductsCategories", mappedBy="category")
*/
private $categories;
//..
class ProductsCategories {
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Product")
*/
private $product;
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Category")
*/
private $category;
//..
class Category {
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToMany(targetEntity="ProductsCategories", mappedBy="product")
*/
private $products;
//..
Ich möchte viele zu viele Verknüpfung mit zusätzlichen Klasse erstellen, um zusätzliche Felder hinzuzufügen. Mein Problem ist, dass ich weiß nicht, wie Formularfeld zu erzeugen, hier ist meine Form Typ
//..
->add('categories', 'entity', [
'class' => 'AppBundle:Category',
'choice_label' => function($category, $key, $index) {
return $category->getName();
},
'multiple' => true,
'required' => true,
'expanded' => false,
])
//..
Aber wenn ich das Formular abschicken, diese Fehler auftauchen:
Expected value of type "Doctrine\Common\Collections\Collection|array" for association field "AppBundle\Entity\Product#$categories", got "AppBundle\Entity\Category" instead.
Dank.
Nein, nein, nein, Sie verstehen nicht, mit Ihrem Beispiel kann ich der neu erstellten dritten Tabelle keine zusätzlichen Felder hinzufügen. http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-unidirectional 'Warum sind Viele-zu-Viele-Verbindungen weniger verbreitet? Da Sie häufig zusätzliche Attribute einer Assoziation zuordnen möchten, führen Sie in diesem Fall eine Assoziationsklasse ein. Folglich verschwindet die direkte Viele-zu-Viele-Assoziation und wird durch Eins-zu-Viele/Viele-zu-Eins-Assoziationen zwischen den 3 teilnehmenden Klassen ersetzt. – nacholibre
Entschuldigung, ich verstehe nicht, dass Sie eine ManyToMany mit Attributen wollen, Ich denke, dass Sie einen ProductCategoryType mit einigen Feldern für Ihre "Attribute" und einem Feld EntityType für Kategorie erstellen müssen. Dann fügen Sie im ProductType einen CollectionType von ProductCategoryType hinzu. – mpiot