Php 条令:具有相似条件的多个orWhere

Php 条令:具有相似条件的多个orWhere,php,sql,symfony,doctrine-orm,Php,Sql,Symfony,Doctrine Orm,使用具有以下结构的表: id | count /string/id1 | 3 /string/id1/r1 | 2 /string/id1/r2 | 1 /string/id2/r1 | 2 /string/id2 | 3 /string/id2/r1 | 2 /string/id3/r1 | 5 我想选择id中需要子字符串的所有行。 即 我需要id:/string/id1和/string/id2中包含子字符串的所有行 查询应该是简单的

使用具有以下结构的表:

id              | count
/string/id1     | 3 
/string/id1/r1  | 2
/string/id1/r2  | 1 
/string/id2/r1  | 2
/string/id2     | 3 
/string/id2/r1  | 2
/string/id3/r1  | 5
我想选择id中需要子字符串的所有行。 即 我需要id:/string/id1和/string/id2中包含子字符串的所有行

查询应该是简单的-纯sql:

select * from table_name where id LIKE '/string/id1%' OR id LIKE '/string/id2%';
结果应该是:

id              | count
/string/id1     | 3 
/string/id1/r1  | 2
/string/id1/r2  | 1
/string/id2/r1  | 2
/string/id2     | 3 
/string/id2/r1  | 2
不幸的是,如果您试图在symfony和doctrine2中使用相同的查询:

$ids = array('/string/id1', '/string/id2');

$query = $this->createQueryBuilder('r')
              ->select('r');
foreach ($ids as $id) {
    $query->orWhere("r.linkedId LIKE :id ")
        ->setParameter('id', $id."%");
}
$plainQuery = $query->getQuery()->getSQL();
$results = $query->getQuery()->getResult();
普通查询看起来与select*from table_name相同,其中id类似于“/string/id1%”或id类似于“/string/id2%”;,但结果并非如此

结果仅包含ids-/string/id2中最后一项的行


如何解决?我的错在哪里?您有什么建议吗?

我不能确定,但在我看来,这似乎与参数标识符冲突

这就是你想要做的:

构造基本的SELECT*FROM table_name语句 追加r.linker喜欢的位置:id 将id参数的值设置为/string/id1% Append或r.linker像:id
将id参数的值设置为/string/id2%覆盖以前的值我不能确定,但在我看来,这似乎与参数标识符冲突

这就是你想要做的:

构造基本的SELECT*FROM table_name语句 追加r.linker喜欢的位置:id 将id参数的值设置为/string/id1% Append或r.linker像:id
将id参数的值设置为/string/id2%覆盖上一个值如果运行原始查询,phpMyAdmin会显示什么?它包括正确的结果吗?如果是这样,则实体的linkedId字段上似乎存在映射问题。如果运行原始查询,phpMyAdmin会显示什么?它包括正确的结果吗?如果是这样的话,这似乎是实体的linkedId字段上的映射问题。
id              | count
/string/id2/r1  | 2
/string/id2     | 3 
/string/id2/r1  | 2
foreach ($ids as $i => $id) { 
    // $i here has the value of 0,1,2, etc...

    $query->orWhere("r.linkedId LIKE :id$i" ) // append $i
        ->setParameter("id$i", $id."%"); // but also append it here 
}