2017-10-19 22 views
2

j'ai un:Symfony CollectionType sans entité

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

je besoin d'une collection (CollectionType) de Q&A s, mais il n'y a pas d'entité côté inverse dans mon modèle (entité Q&A n'a pas ManyToOne relation avec toute autre entité).

Question

Quelles sont mes options ici?

J'ai aussi:

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

Je pensais à faire la classe Page comme abstract et créer une entité distincte pour chaque type de page, chaque héritant de Page.

De cette façon, je pouvais

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

Mais ce n'est pas un gros site, j'ai comme 5 différents types de pages à ce sujet, je pense qu'il serait exagéré d'avoir une entité différente pour chaque type de page.

+0

Créez une classe de modèle (par exemple, 'AppBundle \ Model \ QACollection') pouvant contenir un tableau de' AppBundle \ Entity \ QA' et associer un formulaire à celui-ci. – ccKep

+0

Merci, j'aurais vraiment dû y penser avant. Ça fonctionne bien maintenant! – yurden

Répondre

0

Tout d'abord, cela n'a rien à voir avec Symfony. C'est une chose de Doctrine. Soit dit en passant, vous n'avez pas d'excès ici, parce que votre Modèle devrait avoir du sens et être rationnel, pour vous permettre de développer votre code de base.

Il existe tellement de situations dans lesquelles, le programmeur, conçoit un modèle mal formé, et obtient des problèmes, tout en développant la base de code.

Après tout cela, comment savez-vous que:

Ce n'est pas un grand site

? Beaucoup de grands sites Web d'aujourd'hui, n'ont pas été si gros depuis le début. donc ce serait une bonne pratique pour vous en tant que développeur d'essayer, de ne pas badiner le Model Design.

La conception proposée semble bonne, et pour être honnête, vous avez une bonne compréhension des structures de données nécessaires pour votre modèle.

Vous devez avoir:

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

et:

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

Astuce: Essayez d'utiliser des mots anglais complets et des phrases tout le temps, comme c'est une meilleure pratique orientée objet monde. Gardez à l'esprit que vos utilisateurs n'ont pas besoin de les lire. Ils sont là pour vous de ne pas rester coincé dans des phrases malformées à l'avenir.

+0

Merci beaucoup d'avoir édité mon article original et pour cette réponse! – yurden

+0

Désolé, j'ai envoyé le commentaire précédent sans le terminer et je ne peux pas le modifier maintenant. Ce que je veux dire par «ce n'est pas un grand site Web», c'est qu'il ne deviendra jamais grand, c'est vraiment un très petit site de vitrine locale qui a été de cette taille depuis 10 ans maintenant, je le rafraîchis. Heureux de savoir que mon idée était bonne. Je suis allé avec la suggestion de ccKep avant que vous répondiez et cela fonctionne très bien, pensez-vous toujours que je dois passer à cette conception de modèle? Merci aussi pour les conseils sur l'utilisation de mots complets! – yurden

+0

Les métriques pour un bon modèle de conception, sont là sur Internet, mais l'idée de ce qu'il faut mettre dans votre modèle vient du domaine de problème, vous allez résoudre. Les entités et leurs NOMS devraient vraiment exister là-bas. par exemple Si j'étais vous, je n'irais pas avec une entité nommée 'Content', parce que cela n'a pas beaucoup de sens. Presque tout est contenu. Vous devriez être plus spécifique avec les entités dans votre processus de conception de modèle. – Trix