存在三个实体;主题,元和用户。
主题OneToMany Meta ManyToOne用户
如何使用Symfony Forms创建它?
最初这是Topic和User之间的ManyToMany关系,但是这已被改变以允许关于关系的其他信息存储在Meta中。
原始形式:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('users')
;
}
修改后的表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title')
->add('users', EntityType::class, [
'multiple' => true,
'class' => 'FooBarBundle:User',
'choice_label' => 'username',
])
;
}
这将呈现一个带有标题的表单和一个用户的多选。问题是用户没有映射到Meta,因此用户数据不会被保留。是mapped=false
并使用控制器将Meta实体附加到Thread以正确的方式来处理这种关系?或者有没有办法使用DataTransformer
将用户转换为Metas?
---更新---
public function setUsers($users) {
foreach($users AS $user) {
$meta = new Meta();
$meta
->setUser($user)
->setThread($this);
$this->addMeta($meta);
}
return $this;
}
或者正在使用Form::handleRequest
到Thread::setUsers
内的电话将用户转换为Meta?