【发布时间】:2014-10-11 21:45:41
【问题描述】:
使用带结构的表:
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 和教义 2 中使用相同的查询:
$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 where id LIKE '/string/id1%' OR id LIKE '/string/id2%';,但结果却不是。
results 仅包含 ids 中最后一项的行 - /string/id2
id | count
/string/id2/r1 | 2
/string/id2 | 3
/string/id2/r1 | 2
如何解决?我的错误在哪里?你有什么建议吗?
【问题讨论】:
-
如果您运行原始查询,phpMyAdmin 会显示什么?它是否包括正确的结果?如果是这样,这似乎是您实体的
linkedId字段上的映射问题。
标签: php sql symfony doctrine-orm