2017-10-19 1 views
2

Ich habe ein:Symfony Collection ohne Einheit

class Q&A 
{ 
    private $question 
    private $answer 
} 

ich eine Sammlung benötigen (CollectionType) von Q&A s, aber es gibt keine inverse Seite Einheit in meinem Modell (Q&A Einheit hat keine ManyToOne Beziehung mit jede andere Entität).

Frage

Welche Möglichkeiten hier sind?

Ich habe auch:

class Page 
{ 
    @ORM\OneToMany(targetEntity="Content") 
    private $contents; 
} 

Ich dachte darum, die Page Klasse als abstract und eine separate Einheit für jeden Seitentyp erstellen, die jeweils von Page vererben.

So kann ich

konnte
class Q&APage 
{ 
    @ORM\OneToMany(targetEntity="Q&A") 
    private $q&as; 
} 

Aber es ist keine große Website, ich mag 5 verschiedene Seitentypen auf sie haben, fühle ich es übertrieben, eine andere Einheit für jeden Seitentyp zu haben sein würde.

+0

Erstellen Sie eine Modellklasse (z. B. 'AppBundle \ Model \ QACollection'), die ein Array von' AppBundle \ Entity \ QA' enthalten und ein Formular damit verknüpfen können. – ccKep

+0

Danke, daran hätte ich vorher wirklich gedacht. Es funktioniert jetzt gut! – yurden

Antwort

0

Das hat zunächst nichts mit Symfony zu tun. Das ist eine Doktrin Sache. Übrigens, Sie haben hier keinen Overkill, denn Ihr Model sollte sinnvoll und rational sein, damit Sie Ihre Codebasis entwickeln können.

Es gibt so viele Situationen, in denen der Programmierer ein fehlerhaftes Modell entwirft und in Schwierigkeiten gerät, während er die Codebasis entwickelt.

Nach all dem, wie Sie wissen, dass:

, dass nicht eine große Website ist

? Viele der heutigen großen Websites waren von Anfang an nicht so groß. so wäre es eine gute Übung für Sie als Entwickler zu versuchen, nicht die Model Design zu trifle.

Das vorgeschlagene Design sieht gut aus, und um ehrlich zu sein, haben Sie ein gutes Verständnis der Datenstrukturen, die für Ihr Modell benötigt werden.

Sie benötigen einen haben:

class QuestionAndAnswer 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="QuestionAndAnswerPage", inversedBy="questionAndAnswers") 
    */ 
    private $questionAndAnswerPage; 
} 

und a:

class QuestionAndAnswerPage 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="QuestionAndAnswer", mappedBy="questionAndAnswerPage") 
    */ 
    private $questionAndAnswers; 
} 

Tipp: Testen Sie komplette Englisch Wörter zu verwenden und Phrasen die ganze Zeit, wie die Best Practice in Objekt orientiert Welt. Denken Sie daran, dass Ihre Benutzer sie nicht lesen müssen. Sie sind für Sie da, um in Zukunft nicht in missverständlichen Formulierungen stecken zu bleiben.

+0

Vielen Dank für die Bearbeitung meiner ursprünglichen Post und für diese Antwort! – yurden

+0

Entschuldigung, ich habe den vorherigen Kommentar gesendet, ohne ihn zu beenden und kann ihn jetzt nicht bearbeiten. Was ich mit "es ist keine große Website" meine ist, dass es nie groß werden wird, es ist wirklich eine sehr kleine lokale Workshop-Showcase-Website, die seit 10 Jahren so groß ist, ich erfrische sie nur. Gut zu wissen, dass meine Idee gut war. Ich ging mit ccKeps Vorschlag, bevor Sie geantwortet haben, und es funktioniert gut, denken Sie immer noch, dass ich zu diesem Modell Design wechseln muss? Danke auch für die Tipps zur Verwendung vollständiger Wörter! – yurden

+0

Metriken für ein gutes Modell Design, gibt es im Internet, aber die ganze Idee, was Sie in Ihr Modell einfügen, kommt aus der Problemdomäne, die Sie lösen werden. Entitäten und ihre NAMEN sollten wirklich da draußen existieren. zum Beispiel Wenn ich du wäre, würde ich nicht mit einer Entität namens "Content" gehen, weil das nicht viel Sinn macht. Fast alles ist zufrieden. Sie sollten mit Entitäten in Ihrem Modellentwurfsprozess genauer sein. – Trix

Verwandte Themen