2
我有实体PointOfSale,它与自己的标签和类别有许多关系,我正在寻找如何优化查询,当我从它的标签和类别加载1k pointsOfSales数据库时。Doctrine ManyToMany优化了很多查询
映射:
/**
* @ORM\ManyToMany(targetEntity="Tag", inversedBy="pointsOfSales", fetch="EAGER")
* @Serializer\Groups({"detail","list"})
* @Serializer\MaxDepth(3)
* @ORM\JoinTable(name="pointOfSales_tags")
**/
private $tags;
/**
* @ORM\ManyToMany(targetEntity="Category", inversedBy="pointsOfSales", fetch="EAGER")
* @Serializer\Groups({"detail","list"})
* @Serializer\MaxDepth(3)
* @ORM\JoinTable(name="pointOfSale_categories")
**/
private $categories;
事情是,当我想用类别和标签返回JSON,总有像2K的查询,而不是一个,我所需要的。
我使用这个查询:
$POSqb = $this->createQueryBuilder('pos');
->leftJoin('pos.categories','c');
->leftJoin('pos.tags','t');
$query = $POSqb->getQuery();
return $query->execute();
这并不重要,如果我使用JMS串行或取渴望或我使用函数来获取从实体内容,仍然学说将获取类别并用它自己的查询标记每个pointOfSale。
有没有办法优化这个在单个查询中使用映射? (分页并不溶液)
//编辑:另一种选择可能是这样的,所有的选择和学说实体映射
$POSqb = $this->createQueryBuilder('pos')
->select('pos','c','t')
->leftJoin('pos.categories','c')
->leftJoin('pos.tags','t')
这是不工作,因为查询缺少FROM语句,但是当我添加'''从PointOfSale pos'''我得到'''错误:类'PointOfSale'没有定义.'''这是奇怪的。但我不确定是否试图强制从连接中选择全部将强制映射实体类。 – zajca
哦,真的。类名必须看起来像“FROM AmoMainBundle:公司c” – maches