如何获取额外数据以提供 symfony2 集合字段类型?

How to fetch extra data to feed a symfony2 collection field type?

我正在使用 Symfony2 的基本集合字段,一切正常。

假设我有:

->add('product', 'collection', array(...))

现在,在我看来,我正在调用 product.vars.data.owner 我有 oneToOne product->getOwner().

这会为集合中的每个产品生成一个额外请求。 由于我不能在集合字段中使用查询生成器,我如何确保它的原则获取产品所有者以避免那些额外的请求?

如果您不能使用查询生成器,您可以强制 Doctrine 始终在通过 EAGER 加载关联加载产品时加载产品的所有者:

/**
 * @ORM\OneToOne(targetEntity="Application\Entity\Owner", fetch="EAGER")
 */
protected $owner;

http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html#by-eager-loading

这是一个示例(我没有看到您的数据映射和表单生成器),希望这对您有所帮助:

1 :按 dql

获取数据
$dql = "select c from category c left join c.product p join p.owner o where c.id = ?1";
$category = $this->createQuery($dql)->setParameter(1, $id)->getSingleResult();

2 : 假设你有一个可以有很多产品的分类表单:

class Category
{
    // manyToMany
    private $product
}

$form = $this->createForm(new CategoryType(), $category);

3 :如果您的集合类型是嵌入式 ProductType(表单类型) 那么您可以在模板中使用以下行:

{{ form.product.vars.data.owner }}