Pet*_*ter 8 forms doctrine symfony symfony-2.3
我有3个实体:
[Member] ----OneToMany----> [MemberCategory] ---ManyToOne---> [Category]
Run Code Online (Sandbox Code Playgroud)
这对于从数据库中获取结果很有效,但是我无法使表单生成器构建正确的表单控件.
我想要一个包含复选框的所有类别的列表,这些复选框会针对成员使用的类别进行检查.最终我想添加优先级字段.
会员
class Member
{
protected $id;
@ORM\OneToMany(targetEntity="MemberCategory", mappedBy="member")
protected $categories;
}
Run Code Online (Sandbox Code Playgroud)
类别
class Category
{
protected $id;
@ORM\Column(name="category_name", type="string", length=50, nullable=false, unique=true)
private $categoryName;
}
Run Code Online (Sandbox Code Playgroud)
MemberCategory
class MemberCategory
{
@ORM\Id
@ORM\ManyToOne(targetEntity="Member")
@ORM\JoinColumns({
@ORM\JoinColumn(name="member_id", referencedColumnName="id", onDelete="CASCADE")
private $member;
@ORM\Id
@ORM\ManyToOne(targetEntity="Category")
@ORM\JoinColumns({
@ORM\JoinColumn(name="category_id", referencedColumnName="id", onDelete="CASCADE")
private $category;
@ORM\Column(name="priority", type="integer", nullable=true)
protected $priority;
}
Run Code Online (Sandbox Code Playgroud)
使用表单生成器的明显尝试无效.
如果我使用:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:Category',
'property' => 'categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
Run Code Online (Sandbox Code Playgroud)
我得到一个包含所有类别的选择,但没有在MemberCategory中为此成员选择的那些类别.
如果我使用:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:MemberCategory',
'property' => 'category.categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
Run Code Online (Sandbox Code Playgroud)
我为所有用户选择了所有类别.
有谁知道如何使它工作,这是关系数据中一个明显的常见模式,使用SQL和PHP很容易.
在Symfony 2.3和Doctrine中有直接的解决方案吗?
您将需要在表单中使用查询构建器
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:MemberCategory',
'property' => 'category.categoryName',
'query_builder' => function(EntityRepository $er ) use ( ? ) {
return $er->createQueryBuilder( ? )
// your query with a left join probably
}
'multiple' => true,
'expanded' => true,
'required' => false
));
Run Code Online (Sandbox Code Playgroud)
请参阅文档以了解正确使用方法。请参阅带有参数的 symfony2 表单查询构建器示例
| 归档时间: |
|
| 查看次数: |
7018 次 |
| 最近记录: |