ich auf einer Symfony 2
basierten Web-App arbeite und viele zu viele Beziehung zwischen Entitäten erstellen kämpfen:Wie eine viele zu viele Beziehung in Symfony2 verwenden
Jede Task
Einheit sollte auf eine beliebige Anzahl von Categories
zugeordnet werden . Natürlich kann jede Category
von einer beliebigen Anzahl von Task
Entitäten verwendet werden. Während eine Task
ihre Categories
kennen muss, hat die Category
Klasse keine Beziehung zurück zu Tasks
.
Nach this tutorial I erstellt:
class Task {
/**
* @ORM\Column(name="categories")
* @ORM\ManyToMany(targetEntity="MyBundle\Entity\Category")
*/
protected $categories;
public function __construct() {
$this->productVariations = new \Doctrine\Common\Collections\ArrayCollection();
...
}
}
der in der folgenden SQL-Tabelle ergibt:
CREATE TABLE task ... categories VARCHAR(255) NOT NULL, ...
Ein neues Task
verwendet man ein Formular mit der folgenden Art erstellt:
class TaskType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('categories', EntityType::class, array(
'class' => 'MyBundle:Category',
'choice_label' => 'name',
'multiple' => true,
'expanded' => true,
))
...
}
}
Einreichen des Formulars und Fortführen des neuen Task
Instanz führt in einer SQL-Zeile mit folgendem Inhalt in der categories
Spalte:
Doctrine\Common\Collections\[email protected]
Was bedeutet das? Speichern der referenzierten Category
Entities als Array ist keine normale Form, aber natürlich gültig (tatsächlich würde ich diese Lösung dem Hinzufügen einer Beziehungstabelle vorziehen, da in der Praxis die Anzahl der Kategorien pro Task ziemlich klein ist, also eine dritte Tabelle mehr wäre Overhead).
Ich würde jedoch annehmen, dass das Array die IDs der referenzierten Objekte/Zeilen in irgendeiner Form speichert. Wie wäre es möglich, eine beliebige Anzahl von Referenzen in einer VARCHAR(255)
Spalte zu speichern?
Beim Senden und Persistent erstellt einen DB-Eintrag, die Category
Referenzen sind nicht korrekt gespeichert. Wenn ich versuche, diesen Eintrag erneut zu lesen, ist die Eigenschaft categories
leer.
Warum nicht das [this] (http://knpuniversity.com/screencast/collections) Tutorial verwenden? –