如何以 symfony 自动生成的形式(链接到关系)在选择小部件中设置一组结果
how to set a set of results in a choice widget in a symfony auto-generated form (linked to a relation)
我想知道用下面的代码,如何在生成的表单中显示一组联系人,链接到这个笔记的公司,而不是数据库中的所有联系人?
实体注释:
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\NoteType")
* @ORM\JoinColumn(nullable=false)
*/
private $noteType;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Contact", inversedBy="contacts")
* @ORM\JoinColumn(nullable=true)
*/
private $contact;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Company")
* @ORM\JoinColumn(nullable=false)
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\User", inversedBy="users")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
实体公司:
/**
* @ORM\OneToMany(targetEntity="Main\MainBundle\Entity\Contact", mappedBy="company", cascade={"remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $contacts;
如果您需要在表单字段中获取特定的实体集,您可以使用 query builder。
在你的情况下(在你的表单中输入 class)它可能是这样的:
$builder->add('contacts', 'entity', array(
'class' => 'MainMainBundle:Contact',
'query_builder' => function (EntityRepository $er) use ($company) {
return $er->createQueryBuilder('c')
->where('c.company = :company')
->setParameter('company', $company);
},
));
注意传递$company
变量。
如果您不喜欢使用 QueryBuilder,您可以在控制器中设置您的联系人:
$oForm = $this->createForm(new CompanyForm($contacts));
在表格中您可以这样做:
public function __construct($contacts))
{
$this->vContacts = $contacts;
}
然后:
->add('contacts', 'choice', array(
'required' => true,
'label' => 'contacts',
'choices' => $this->vContacts,
)
)
我想知道用下面的代码,如何在生成的表单中显示一组联系人,链接到这个笔记的公司,而不是数据库中的所有联系人?
实体注释:
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\NoteType")
* @ORM\JoinColumn(nullable=false)
*/
private $noteType;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Contact", inversedBy="contacts")
* @ORM\JoinColumn(nullable=true)
*/
private $contact;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\Company")
* @ORM\JoinColumn(nullable=false)
*/
private $company;
/**
* @ORM\ManyToOne(targetEntity="Main\MainBundle\Entity\User", inversedBy="users")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
实体公司:
/**
* @ORM\OneToMany(targetEntity="Main\MainBundle\Entity\Contact", mappedBy="company", cascade={"remove"})
* @ORM\JoinColumn(nullable=true)
*/
private $contacts;
如果您需要在表单字段中获取特定的实体集,您可以使用 query builder。
在你的情况下(在你的表单中输入 class)它可能是这样的:
$builder->add('contacts', 'entity', array(
'class' => 'MainMainBundle:Contact',
'query_builder' => function (EntityRepository $er) use ($company) {
return $er->createQueryBuilder('c')
->where('c.company = :company')
->setParameter('company', $company);
},
));
注意传递$company
变量。
如果您不喜欢使用 QueryBuilder,您可以在控制器中设置您的联系人:
$oForm = $this->createForm(new CompanyForm($contacts));
在表格中您可以这样做:
public function __construct($contacts))
{
$this->vContacts = $contacts;
}
然后:
->add('contacts', 'choice', array(
'required' => true,
'label' => 'contacts',
'choices' => $this->vContacts,
)
)