TYPO3/Extbase中带有and和OR的嵌套查询
我需要为TYPO3扩展构建一些复杂的查询。其中一个查询是在给定用户集或默认项集中查找自定义项。默认条目保存为TYPO3/Extbase中带有and和OR的嵌套查询,typo3,extbase,nested-queries,Typo3,Extbase,Nested Queries,我需要为TYPO3扩展构建一些复杂的查询。其中一个查询是在给定用户集或默认项集中查找自定义项。默认条目保存为cruser\u id=0。因此,有必要构建嵌套的逻辑运算符 我试过的方法如下: public function findById($cId, $userId) { $query = $this->createQuery(); $query->getQuerySettings()->setEnableFieldsToBeIgnored(['pid', 'c
cruser\u id=0
。因此,有必要构建嵌套的逻辑运算符
我试过的方法如下:
public function findById($cId, $userId) {
$query = $this->createQuery();
$query->getQuerySettings()->setEnableFieldsToBeIgnored(['pid', 'cruser_id', 'sys_language_uid']);
$res = $query->matching(
$query->logicalAnd(
$query->equals("id", $cId),
$query->logicalOr(
$query->equals("cruser_id", $userId), //include custom entries
$query->equals("cruser_id", 0) //also include default entries
)
))->execute()->getFirst();
print_r($res);
这不起作用:-(我试图调试,但我没有发现代码中有错误的迹象。如果有人能在这里帮助我,那就太好了。总结一下评论: 如果您的记录不在已配置的持久性pid
plugin.tx\u yourext.persistence.storagePid
中,或者您根本没有配置持久性存储,那么您需要禁用pid检查
setEnableFieldsToBeIgnored
只能应用于所谓的启用字段,在大多数情况下,这些字段是禁用的、结束时间的、fe组的、开始时间的,并通过$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']
进行配置
要抑制pid检查,您应该使用
setPerrectStoragePage(false)
。对于sys\u语言,有一个setPerrectSysLanguage(false)
。并且cruser\u id根本没有被检查,所以您可以跳过它。对于我来说,您的约束看起来是正常的,除了setEnableFieldsToBeIgnored(['pid',cruser\u id',sys\u language\u uid'))
-这些不是启用字段。您是否检查了已生成的查询?我花了很多时间调试SQL查询,但发现了问题。在生成约束之前,我应该执行$query->getQuerySettings()->setOrderStoragePage(false);
以忽略pid
。谢谢您的提示!