【发布时间】:2022-08-04 15:58:53
【问题描述】:
我创建了一个管理事件的 CRUD,另一个管理音乐风格的 CRUD。
我在两者之间建立了多对多关系,我想从我的活动创作中选择我的音乐风格。
因此,我为用于创作和编辑的事件制作了一个表单类型。
在处理我的关系时,这种杂物对我很有效。事件的创建仍然有效,但是当我想访问我的事件修改表单的视图时出现此错误:
Unable to transform value for property path \"music_type\": Expected a Doctrine\\Common\\Collections\\Collection object.
你怎么看 ?
我的事件类型的部分音乐风格:
->add(\'music_type\', EntityType::class, [
\'class\' => MusicStyle::class,
\'query_builder\' => function (MusicStyleRepository $r) {
return $r->createQueryBuilder(\'i\')
->orderBy(\'i.name\', \'ASC\');
},
\'label\' => \'Style de musique\',
\'label_attr\' => [
\'class\' => \'form-label mt-4\'
],
\'choice_label\' => \'name\',
\'multiple\' => true,
\'expanded\' => true,
])
我的实体事件:
* @return Collection<int, MusicStyle>
*/
public function getMusicStyles(): Collection
{
return $this->musicStyles;
}
public function addMusicStyle(MusicStyle $musicStyle): self
{
if (!$this->musicStyles->contains($musicStyle)) {
$this->musicStyles[] = $musicStyle;
$musicStyle->addEvent($this);
}
return $this;
}
public function removeMusicStyle(MusicStyle $musicStyle): self
{
if ($this->musicStyles->removeElement($musicStyle)) {
$musicStyle->removeEvent($this);
}
return $this;
}
我的事件控制器
public function edit(
EventRepository $repository,
Event $event,
Request $request,
EntityManagerInterface $manager
): Response {
$form = $this->createForm(EventType::class, $event);
$form->handleRequest($request);
if($form->isSubmitted() && $form->isValid()) {
$event = $form->getData();
$manager->persist($event);
$manager->flush();
$this->addFlash(
\'success\',
\'Ton event a bien été modifié !\'
);
return $this->redirectToRoute(\'event.index\');
}
return $this->render(\'pages/event/edit.html.twig\', [
\'form\' => $form->createView()
]);
}
这似乎是一个愚蠢的问题,所以我是 symfony 的新手
-
难道你在使用
->add(\'music_type\', ...)而应该是->add(\'musicStyles\', ...)? -
不,我数据库中的冠军是个好名字
-
但该属性似乎是 $musicStyles
-
这是因为 Doctrine 的 getResult() 方法(在 \'query_builder\' 选项中使用)总是返回一个数组,而不是 Collection 对象。更多详情here。