DQL中的等效SQL查询与连接表的ManyToMany关系

时间:2017-01-20 13:22:02

标签: sql symfony orm doctrine dql

作为标题,我正在努力获得SQL查询的正确DQL版本(或通信查询构建器)。

涉及的表格如下: SQL Graphic Schema

对于按ID排序的每件商品,我需要对其按照“ord'”排序的图片进行检索。

这是SQL中的正确查询(希望......顺便说一下:P)。

hyperParamSpace = pd.DataFrame([row for row in itertools.product(*param_grid.values())],
                                columns=param_grid.keys(), dtype=object)

这些是实体(只有关系):

SELECT
    PG.product_id, 
    PIJG.img_id,
    PI.uri,
    PI.ord
FROM
    ProductGeneral PG 
        JOIN
    ProductImgJoinGeneral PIJG ON PG.product_id = PIJG.product_id
        JOIN
    ProductImg PI ON PIJG.img_id = PI.img_id
ORDER BY 
    PG.product_id ASC, 
    PI.ord ASC;

任何帮助?

1 个答案:

答案 0 :(得分:0)

PIJG表在您的Doctrine映射中没有映射的实体,因此您无法对其进行SELECT。但是PIJG.img_id = PI.img_id,所以你可以这样做:

$qb = $this->productGeneralRepository->createQueryBuilder('PG')
    ->select('PG.product_id, PI.img_id, PI.uri, PI.ord')
    ->innerJoin('PG.img', 'PI')
    ->addOrderBy('PG.product_id', 'ASC')
    ->addOrderBy('PI.ord', 'ASC');

然后,如果您想要原始DQL,只需获取$qb->getDql()。由于您的Doctrine映射, innerJoin 方法会自动执行双JOIN