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