2016-04-06 7 views
0

hier simple_array MySQL gewählt sparen ist die Situation:Symfony3.0.3 Choice unter Entität Einträge über Kontrollkästchen wählen und die

  1. ich das Entity haben jobtypes die name und description Felder enthält
  2. Ich mache Registrierungsformular und der Benutzer, der sich registriert, soll in der Lage sein, unter den jobtypes Einträgen mit ihrem Namen zu wählen. So weit so gut
  3. Ich möchte die verfügbaren Optionen (jobtypes Einträge) durch Checkboxen auflisten, so dass der Benutzer einen oder mehrere wählen und dann die überprüften zu einem simple_array-Typ in MySQL speichern kann.
  4. Ich baue das Formular Symfony 3.0.3

Das Problem mit:

Alles sieht gut aus, bis ich die Datenbank überprüfen. Die ausgewählten Jobtypen werden nicht mit den Namen angezeigt, sondern mit einem seltsamen Pfad?

Beispiel:

Ich will 'name1', 'name2', .....

ich Lehre \ Common \ Collections \ Arraycollection @ 0000000010bec20a0000000010aaccb8

Die Frage

Wie soll ich bauen mein -> add() - Feld in Symfony, um dies zu tun?

Dies ist, was ich bisher haben

->add('interestedin', CollectionType::class, array(
      'entry_type'=>ChoiceType::class, array(
       'expanded'=>true,'multiple'=>true,'choices'=>array(
        'class'=>'AppBundle\Entity\jobtypes','choice_label'=>'name')))) 

dies ist, wie ich die Daten

$interestedin = array(); 
$interestedin[] = $form['interestedin']->getData(); 

bekommen und wie ich stellte es auf ein Objekt

$sprovider->setInterestedin($interestedin); 

sprovider.php

/** 
* @var array 
* 
* @ORM\Column(name="interestedin", type="simple_array") 
*/ 
private $interestedin; 

ich an nichts anderes denken können Sie zeigen, dass Sie meine Frage beantworten könnte helfen. Wenn es etwas gibt, was ich verpasst habe, sag es bitte.

EDIT

wenn ich {{ dump(sprovider.interestedin) }}

i

array(1) { [0]=> object(Doctrine\Common\Collections\ArrayCollection)#489 (1) { ["elements":"Doctrine\Common\Collections\ArrayCollection":private]=> array(2) { [0]=> object(AppBundle\Entity\jobtypes)#482 (3) { ["id":"AppBundle\Entity\jobtypes":private]=> int(1) ["name":"AppBundle\Entity\jobtypes":private]=> string(15) "Kitchen Fitting" ["description":"AppBundle\Entity\jobtypes":private]=> string(32) "Building a kitchen from scratch." } [1]=> object(AppBundle\Entity\jobtypes)#487 (3) { ["id":"AppBundle\Entity\jobtypes":private]=> int(2) ["name":"AppBundle\Entity\jobtypes":private]=> string(16) "Bathroom Fitting" ["description":"AppBundle\Entity\jobtypes":private]=> string(24) "Rennovate your bathroom." } } } }

bekommen glaube ich nur die Namen der Arbeitsplätze in $interestedin nicht bin immer, aber die ganzen Einträge. Hoffe das hilft ein bisschen.

Antwort

0

Hier ist der Deal. Nachdem ich im Internet nach einer Antwort gesucht hatte, beendete ich leere Hände und beschloss, alles zu versuchen. Hier

ist die Lösung:

Dies ist die Form Eintrag

->add('interestedin', ChoiceType::class, array(
'expanded'=>true,'multiple'=>true,'choices'=>array_combine($interestedin,$interestedin))) 

Dies ist, wie ich die Entscheidungen

$jobtypes = $this->getDoctrine() 
     ->getRepository('AppBundle:jobtypes') 
     ->findAll(); 

    $interestedin = array(); 
    foreach($jobtypes as $jt){ 
     array_push($interestedin,$jt->getName()); 
    } 

Ergebnisse:

Image

Die Datenbank zeigt die ausgewählten Kontrollkästchen als Zeichenfolgen anstelle des seltsamen Pfads an. Der erste Eintrag, den ich zum Vergleich verließ (wie es vorher war).

1

Warum möchten Sie sie als Array speichern? Es sieht aus wie ein ManyToMany relation.

Für den simple_array-Typ speichert Doctrine ein db-Feld und eine implodierte und serialisierte Darstellung des Objekt-Arrays. Sie werden grundlegende Filteroptionen auf einer MySQL-Seite verlieren.

+0

Ich bin ziemlich neu, also könnten Sie bitte ein Beispiel dafür geben? Ich meine die ManyToMany-Beziehung, die Controller-Einstellung und die Zweig-Implementierung. Vielen Dank –

Verwandte Themen