【发布时间】:2017-07-16 16:41:12
【问题描述】:
我有一个 Session 实体,它有一个整数 $num 属性。两个或多个会话可以具有相同的$num 值。一个Session 可能属于多个Group 实体。
Group 还可以附加多个会话。创建Group 时,用户可以将其中包含的会话分配到ArrayCollection,但一个组不能有两个具有相同$num 值的会话。
如何使用 Symfony 表单组件,特别是使用 CollectionType 字段类型来强制执行此限制?
编辑:
这是从组到会话的(单向)多对多映射:
# Group.orm.yml
manyToMany:
sessions:
targetEntity: Session
joinTable:
name: sessiongroups_sessions
joinColumns:
group_id:
referencedColumnName: id
inverseJoinColumns:
session_num:
referencedColumnName: num
我将$num 设置为inverseJoinColumn 中的引用列(而不是id),因此sessiongroups_sessions 表永远不能有两行或多行具有相同组ID 的引用具有相同$num 的会话价值。
从数据库的角度来看这很好(编辑:显然不是,我认为这会在不尝试的情况下工作),我需要知道如何在 form 用户指定组的会话。
我知道有一个名为Collection 的约束,但它需要为集合的每个键指定一个验证器。我知道我可以构建表单以将会话添加到集合中,如下所示:
$group = new Group();
$form = $this->createFormBuilder($group)->add('sessions', CollectionType::class,
array('entry_type' => EntityType::class, 'entry_options' => array('class' => AppBundle:Group));
如何在此处指定一个约束以确保集合永远不会拥有两个具有相同$num 值的会话?
【问题讨论】:
-
请先显示一些代码。这是您在这方面的第二个问题。
-
我什至不知道从哪里开始。如果这有助于@colburton,我可以发布 Session 和 Group 之间的多对多关联的映射信息
-
symfony 中的表单组件太多了,让我很困惑
-
以
$builder->add('something', CollectionType::class ...)位开头。 -
你需要一个自定义类验证器
标签: symfony doctrine symfony-forms