Это не столько проблема, сколько то, что я заметил и хотел бы лучше понять.
У меня есть класс Poll
котором есть коллекция votes
и pollOptions
. Мой класс PollOption
имеет poll
к PollOption
он принадлежит, и title
. Класс Vote
также имеет poll
к voteChoices
он принадлежит, а также собственную коллекцию voteChoices
и user
. У класса VoteChoice
есть vote
оно принадлежит, answer
( PollOption
), за который идет голосование, и priority
.
У меня есть форма, содержащая набор форм ( Vote
со многими VoteChoice
)
VoteChoiceType
выглядит следующим образом
class VoteChoiceType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('answer', null, array('disabled' => true)) ->add('priority', null); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'PollBundle\Entity\VoteChoice', )); } }
Теперь в моем VoteController
я создаю и заполняю Vote
многими voteChoices
, устанавливая answer
соответствии с доступными вариантами текущего опроса (полученного из URL-адреса)
$vote = new Vote(); $vote->setPoll($poll); foreach ($vote->getPoll()->getPollOptions() as $op) { $vc = New VoteChoice(); $vote->addVoteChoice($vc->setAnswer($op)); }
-$vote = new Vote(); $vote->setPoll($poll); foreach ($vote->getPoll()->getPollOptions() as $op) { $vc = New VoteChoice(); $vote->addVoteChoice($vc->setAnswer($op)); }
Итак, моя ветка выглядит следующим образом
<ul class="voteChoices" data-prototype="{{form_widget(form.voteChoices.vars.prototype)|e('html_attr') }}"> {% for voteChoice in form.voteChoices %} <li>{{ voteChoice.vars.value.answer }} {{ form_row(voteChoice.priority) }}</li> {% endfor %} </ul> </div> <p><button type="submit" class="btn btn-success">Go!</button></p> {{ form_end(form) }}
Однако, если я VotechoiceType
answer
в свой VotechoiceType
а в моей VotechoiceType
включаю {{ form_row(voteChoice.answer) }}
я замечаю, что все мои параметры опроса из таблицы, как и в выбираемом списке, даже если они отделены от другого опроса.
Почему это? Как я могу заставить его просто отображать варианты, доступные в опросе, к которому принадлежит голосование? Мое подозрение в том, что я не правильно обрабатывал отношения между VoteChoice
и PollOption
(многие к одному). Если я допустил ошибку здесь, я, скорее всего, сделал это в другом месте (например, Poll
возможно, получает каждое Vote
в db, а не те, которые принадлежат ему)