如何获取额外数据以提供 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 }}
我正在使用 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 }}