TYPO3 v8 QueryBuilder WHERE IN语句

时间:2019-07-16 13:06:17

标签: php sql doctrine typo3

我正在尝试对QueryBuilder使用WHERE IN语句。 我想打电话

UPDATE tx_test SET hidden = 0 WHERE uid IN (1,2,3,4) 

我的代码:

    public function makeItemsVisible($itemsToShow)
    {
        $itemUids = implode(",", $itemsToShow);
        $table = 'tx_test';
        $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
            ->getQueryBuilderForTable($table);
        $queryBuilder
            ->update($table)
            ->set('hidden', "0")
            ->where('uid IN (:uids)')
            ->setParameter('uids', $itemUids )
            ->execute();
    }

$ itemUids 1,2,3,4是正确的,但是该语句仅更新数据库中的第一条记录。我会错过什么吗?

1 个答案:

答案 0 :(得分:1)

您应该使用表达式构建器和API添加命名参数:

$queryBuilder
  ->update($table)
  ->set('hidden', 0)
  ->where($queryBuilder->expr()->in(
      'uid',
      $queryBuilder->createNamedParameter($itemUids, Connection::PARAM_INT_ARRAY)
  )
  ->execute();

有关详细信息,请参见ExpressionBuilder文档中的Comparisons section