gpt4 book ai didi

mysql - Symfony Doctrine QB 正在生成过多查询

转载 作者:行者123 更新时间:2023-11-29 10:17:31 24 4
gpt4 key购买 nike

我有一系列类似的查询来从数据库中获取大量信息。

它们都具有如下所示的基本设置,只是表格不同。

问题是,对于 $version_ids 中的每个元素,它将为下面的 3 个特定表生成 SELECT * 查询。

SELECT * FROM prices WHERE version_id = $version_ids[n] // this only for explanation purposes

SELECT * FROM ct_insurance WHERE version_id = $version_ids[n]
SELECT * FROM costs WHERE version_id = $version_ids[n]

因此,如果 $version_ids 有 10 个元素,它将生成 30 个查询,其中每个表 10 个。

这些表的共同点是它们与表版本具有一对一的关系,例如:

class Ct_insurance
{

/**
* @ORM\Id
* @ORM\OneToOne(targetEntity="Version", inversedBy="ct_insurance")
*/
private $version;

另请注意,即使具有上述一系列查询,这些不需要的查询也只会生成一次。因此,该系列中的每个查询至少不包含 30 个查询。

这是查询的一个实例:

    public function getBrandPageData1($version_ids)
{
$doctrineConfig = $this->getEntityManager()->getConfiguration();
$doctrineConfig->addCustomStringFunction('field', 'DoctrineExtensions\Query\Mysql\Field');

$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select("v, field(v.id,:ids) as HIDDEN field")
->addSelect('b.brand AS brand')
->addSelect('b.imgLogoBig')
->addSelect('m.id AS model_id')
->addSelect('m.model AS model')
->addSelect('s.id AS segment_id')
->addSelect('s.segment AS segment')
->addSelect('v.id AS version_id')
->addSelect('v.version AS version')
->addSelect('v.places AS places')
->addSelect('i.imgPath AS img_path')
->addSelect('w.wrYear AS wr_year')
->from('AppBundle:Version', 'v')
->join('v.model', 'm')
->join('m.brandId', 'b')
->join('m.segmentId', 's')
->join('m.images', 'i')
->join('AppBundle:Warranty', 'w', 'WITH', 'w.brand = b.id')
->where('v.id IN (:ids)')
->orderBy('field')
->groupBy('v.id')
->setParameter('ids', $version_ids);
try {
$query = $qb->getQuery();
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return $e;
}
}

我尝试在 DQL 中生成相同的查询,但在 GROUP BY 子句上出现错误。

谢谢

最佳答案

发现它是什么,或者看起来是这样。

在第一个 select 上,对 v 的引用生成实体对象,然后该对象显然会调用所有映射的实体。

所以这解决了它:

$qb->select("field(v.id,:ids) as HIDDEN field")

关于mysql - Symfony Doctrine QB 正在生成过多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49895976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com