Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带联接表的条令查询生成器ManyToMany_Php_Mysql_Doctrine Orm - Fatal编程技术网

Php 带联接表的条令查询生成器ManyToMany

Php 带联接表的条令查询生成器ManyToMany,php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,我尝试通过条令查询生成器构建类似于此的查询: SELECT m.id FROM product p, model m INNER JOIN product_model pm ON (m.id = pm.model_id) WHERE p.id = pm.product_id AND m.serial = ? AND p.id = ? 表“product_model”是许多单向关系中的一个连接表。我使用下面的代码: $queryBuilder = $this->entityManage

我尝试通过条令查询生成器构建类似于此的查询:

SELECT m.id
FROM product p, model m
  INNER JOIN product_model pm ON (m.id = pm.model_id)
WHERE p.id = pm.product_id AND m.serial = ? AND p.id = ?
表“product_model”是许多单向关系中的一个连接表。我使用下面的代码:

$queryBuilder = $this->entityManager->createQueryBuilder();
        $queryBuilder
            ->select('m.id')
            ->from(Model::class, 'm')
            ->join(Product::class, 'p', Join::ON, '1 = 1')
            ->where('m.serial.serial = :serial')
            ->andWhere('p.productId.id = :productId')
            ->setParameters(
                [
                    'serial'    => (string)$serial,
                    'productId' => $productId->value(),
                ]
            );
        $query = $queryBuilder->getQuery();
        $results = $query->getOneOrNullResult();
但当我尝试转储此查询的sql时,我得到:

SELECT m0_.id AS id_0 FROM model m0_ INNER JOIN product p1_ ON (1 = 1) WHERE m0_.serial = ? AND p1_.id = ?

这个查询的结果并不是我所期望的

我找到了解决方案。我需要另一个实体类用于product_model选项卡,该选项卡在查询中具有复合键和少量更改:

$queryBuilder
            ->select('m.id')
            ->from(Model::class, 'm')
            ->join(ProductModel::class, 'pm', Join::WITH, $queryBuilder->expr()->eq('m.id', 'pm.modelId'))
            ->where('m.serial.serial = :serial')
            ->andWhere('pm.productId = :productId')
            ->setParameters(
                [
                    'serial'    => (string)$serial,
                    'productId' => $productId->value(),
                ]
            );