我有 3 个实体:
[Member] ----OneToMany----> [MemberCategory] ---ManyToOne---> [Category]
就从数据库中获取结果而言,这很有效,但我无法让表单生成器构建正确的表单控件。
我想要一个所有类别的列表,其中包含针对会员使用的类别进行检查的复选框。最终我想添加优先级字段。
成员
class Member
{
protected $id;
@ORM\OneToMany(targetEntity="MemberCategory", mappedBy="member")
protected $categories;
}
类别
class Category
{
protected $id;
@ORM\Column(name="category_name", type="string", length=50, nullable=false, unique=true)
private $categoryName;
}
会员类别
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;
}
使用表单生成器的明显尝试不起作用。
如果我使用:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:Category',
'property' => 'categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
我得到一个包含所有类别的选择,但没有在 MemberCategory 中为该成员选择的那些。
如果我使用:
$builder->add('categories', 'entity', array(
'class' => 'SMWMemberBundle:MemberCategory',
'property' => 'category.categoryName',
'multiple' => true,
'expanded' => true,
'required' => false
));
我得到所有用户的所有选定类别。
有谁知道如何让它工作,这是关系数据中明显的常见模式,使用 SQL 和 PHP 很容易。
Symfony 2.3 和 Doctrine 中是否有直接的解决方案?