Mysql

时间:2016-10-30 11:56:20

标签: mysql doctrine-orm

我有一个像这样的数组 -

[
  ['mark', 29],
  ['jolly', 28],
  ['john', 19],
  ['jim', 21],
 .
 .
 .     
]

我想在where子句中使用它,以便只有当列nameage匹配子列时列才更新,尝试这样: -

createQueryBuilder()
     ->update('table', 't')
     ->set('t.eligible', 1)
     ->where('t.name', 't.age' IN(:nameAgeArray))
     ->setParameter('nameAgeArray', $nameAgeArray)
     ->getQuery()
     ->execute();

但这种方式不起作用。有没有办法实现这个目标?

修改 - 数据库结构 -

name      age     eligible
mark       29      null
john       21      null
Max        20      null

1 个答案:

答案 0 :(得分:0)

this answer中所述(已在@PaulSpiegel中提及他的评论),您不能在此类条款中使用多个字段/列。
正如您在this answer here中所述,此限制也适用于orderBy条款。

要使用多个条件,您必须分成两个数组,一个用于名称,一个用于年龄,然后您可以这样做:

createQueryBuilder()
    ->update('table', 't')
    ->set('t.eligible', 1)
    ->where('t.name', IN(:nameArray))
    ->andWhere('t.age', IN(:ageArray))
    ->setParameter('nameArray', $nameArray)
    ->setParameter('ageArray', $ageArray)
    ->getQuery()
    ->execute();