【问题标题】:TYPO3 v8 QueryBuilder WHERE IN statementTYPO3 v8 QueryBuilder WHERE IN 语句
【发布时间】:2019-07-16 13:06:17
【问题描述】:

我正在尝试为 QueryBuilder 使用 WHERE INstatement。 我想打电话

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 是正确的,但该语句仅更新数据库中的第一条记录。我错过了什么吗?

【问题讨论】:

    标签: php sql doctrine typo3


    【解决方案1】:

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

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

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

    【讨论】:

    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 2012-12-24
    • 2015-03-22
    • 2016-05-13
    相关资源
    最近更新 更多