我有以下SQL查询
$uidArray = explode(",", $uids);
foreach ($uidArray as $uid) {
$dynamicUid[] = '`uid` LIKE \''.$uid.'\'';
}
$query = $this->createQuery();
$query->statement("SELECT * FROM `tx_myextension_domain_model_thi` WHERE ".implode($dynamicUid, " OR "));
return $query->execute();
这工作正常,但我想要这样:
$uidArray = explode(",", $uids);
$query = $this->createQuery();
foreach ($uidArray as $key => $value) {
$constraints[] = $query->equals('uid', $value);
}
return $query->matching(
$query->logicalAnd($constraints)
)->execute();
在这里,我得到以下带有查询解析器的输出:
'SELECT `tx_myextension_domain_model_thi`.* FROM `tx_myextension_domain_model_thi`
`tx_myextension_domain_model_thi`
WHERE ((`tx_myextension_domain_model_thi`.`uid` = :dcValue1) AND
(`tx_myextension_domain_model_thi`.`uid` = :dcValue2)) AND
(`tx_myextension_domain_model_thi`.`sys_language_uid` IN (0, -1)) AND
(`tx_myextension_domain_model_thi`.`pid` = 0) AND
((`tx_myextension_domain_model_thi`.`deleted` = 0) AND (
`tx_myextension_domain_model_thi`.`t3ver_state` <= 0) AND
(`tx_myextension_domain_model_thi`.`pid` <> -1) AND
(`tx_myextension_domain_model_thi`.`hidden` = 0) AND
(`tx_myextension_domain_model_thi`.`starttime` <= 1607084460) AND
((`tx_myextension_domain_model_thi`.`endtime` = 0)
OR (`tx_myextension_domain_model_thi`.`endtime` > 1607084460)))'
和Uids作为dcValue-Array。
dcValue1 => '1' (1 chars)
dcValue2 => '2' (1 chars)
也许有人可以帮我重写此代码,因为不幸的是我无法再这样做了!
谢谢 :)
你是否尝试过in运算符?
public function yourFunctionName($uid)
{
$query = $this->createQuery();
$query->in('uid', $uidArray);
return $query->execute();
}
假设你的数组如下所示:
$uidArray = [
0 = '34',
1 = '15',
3 = '88'
]
编辑
如果你不关心对象的存储位置,则可以执行以下操作。
public function yourFunctionName($uid)
{
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->matching(
$query->in('uid', $uidArray)
);
return $query->execute()];
}
哪个将忽略pid
查询中的
感谢您的回答,是的,我已经尝试过,但不幸的是没有成功。`array(2个项目)0 =>'1'(1个字符)1 =>'2'(1个字符)
可以和return $ query-> execute();一起工作。我使用TYPO3 9.5.22,对象arent存储在PID 0中,不知道我也必须在存储库中设置它们。我仅在setup和constants.ts中进行设置。但是非常感谢!:)