我在PHP应用程序中使用Doctrine(但未使用Symfony)。我尝试使用仅一个addWhere / orWhere进行动态查询。
这是我的代码:
$alias = 'a';
$key = 'id';
$qb = $repo->createQueryBuilder($alias);
$qb->select($alias);
$qb->andWhere($alias . ' = ' . $key);
// Key is "id" and value is a dynamic array "[1, 2, 3, 6...]"
$qb->setParameter($key, $value);
如果值仅是“ 1”,则得到此DQL:
SELECT a FROM contact a WHERE a = :id
它有效。但是以值作为数组,我想在没有多个“ andOr”的情况下执行此查询,因为我的数组是动态的。有没有一种方法可以自动添加(addWhere或orWhere)以使用我的数组自动获取它:
SELECT a FROM contact a WHERE a = :id OR a:= id OR a:= id
我知道我自己可以进行for循环,但是我想知道该学说中是否已经存在一种方法。
答案 0 :(得分:1)
您应该使用IN
指令。
$alias = 'a';
$key = 'id';
$values = [1, 2, 3];
$qb = $repo->createQueryBuilder($alias);
$qb->select($alias);
$qb->where(\sprintf("%s.%s IN (:values)", $alias, $key));
$qb->setParameter('values', $values);
我希望这会有所帮助。