如何在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;

如果你不喜欢使用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,
           )
        )

如果您需要在表单字段中获取特定的实体集,您可以使用查询生成器。

在您的情况下(在您的表单类型类中),它可以是这样的:

$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变量