2016-08-01 41 views
2

Sag mal, gibt es eine einfache viele-zu-eins Beziehungen: Modell Haartyp und die Augenfarbe hat:Verwenden ManyToOne Beziehung als Multiple-Choice in Symfony-Form (mit Lehre)

/** 
* @ORM\Entity 
*/ 
class Model 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Hair") 
    * @ORM\JoinColumn(name="hair_id", referencedColumnName="id") 
    */ 
    protected $hair; 

    /** 
    * @ORM\ManyToOne(targetEntity="Eyes") 
    * @ORM\JoinColumn(name="eyes_id", referencedColumnName="id") 
    */ 
    protected $eyes; 

Zum Beispiel könnte Haar sein : blond, braun, schwarz, rot;

Die Augen: blau, grün, grau, braun.

In der Suchmaske möchte ich, dass der Benutzer mehrere Haartypen und Augen auf einmal auswählen kann. Ich benutze 'multiple' Eigenschaft:

class ModelType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('hair', EntityType::class, [ 
       'class' => 'AppBundle:Hair', 
       'choice_label' => 'name', 
       'multiple' => true, 
      ]) 
      ->add('eyes', EntityType::class, [ 
       'class' => 'AppBundle:Eyes', 
       'choice_label' => 'name', 
       'multiple' => true, 
      ]) 
      ->getForm(); 
     ; 
} 

Die Form, wie dies macht:

form

Natürlich, wenn mehrere Werte auswählen und schicken es einen Fehler verursacht:

Expected argument of type "AppBundle\Entity\Hair", "Doctrine\Common\Collections\ArrayCollection" given 

Vielleicht ist das nicht in einem solchen Fall zu verwenden?

Gibt es Best Practices zum Erstellen von Suchformularen in Symfony? Fand keine ...

+0

[Erstellen eines kombinierten Formulartyp durch die Einbettung einzelner formtypes für ein- to-many association in symfony] (http://www.inanzzz.com/index.php/post/a4hv/creating-a-combined-formtype-by-embedding-individual-formtypes-fon-one-to-many- association-in-symfony) und [Vollständiges CRUD-Beispiel im Webform-Stil mit einer eingebetteten assoziierten Entität in symfony] (http://www.inanzzz.com/index.php/post/djrc/ full-webform-style-crud-beispiel-with-embedded-assoziierte-entity-in-symfony – BentCoder

Antwort

1

Das Problem ist nicht die Form, sondern Ihre Zuordnung zu entfernen.

Ich gehe davon aus, dass Ihr Formular mit der Model Entity verknüpft ist. Aus diesem Grund akzeptiert die ManyToOne-Beziehung nur eine verwandte Entität.

Lösung:

Sie ohne Klasse auf das Modell Entity, nur ein Formular verwenden, nicht binden Ihre Form:

http://symfony.com/doc/current/form/without_class.html

+0

Sie haben Recht. Das Formular ist mit Model Entity verknüpft, und es ist keine geeignete Lösung. Das Formular muss NUR an eine Entität gebunden werden, wenn es diese Entität manipuliert.Obwohl das Suchformular mit verwandten Entitäten arbeitet (findet sie), handelt es sich eher um eine Drittfunktionalität für diese Entitäten. Es sollte also keine direkte Zuordnung geben. – Alexander

1

Modell kann viele Haarfarbe und viele Augenfarbe haben?

In diesem Fall Sie many-to-many Beziehung statt many-to-one

Wenn nicht zu verwenden, haben Sie 'multiple' => true, in Ihnen ModelType

+0

Dies ist nur der Fall, wenn wir die zugehörigen Entitäten bearbeiten wollen. Er kann den Entitätstyp verwenden. – Alsatian

+0

Meine Antwort war nicht für das Problem geeignet Ich habe es geändert :) – DOZ

+0

Ihre neue Antwort war auch mein erster Versuch :). Aber jetzt sehe ich, dass es eine Suchform ist;) und sollte nicht an die Entität gebunden sein. – Alsatian