TYPO3/Extbase 中包含 AND 和 OR 的嵌套查询

Nested queries with ANDs and ORs in TYPO3/Extbase

我需要为 TYPO3 扩展构建一些复杂的查询。其中一个查询是在给定用户的集合或默认条目集中寻找自定义条目。默认条目保存为 cruser_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_yourext.persistence.storagePid 中,或者您根本没有配置持久性存储,那么您需要禁用 pid-checks。

setEnableFieldsToBeIgnored 只能应用于所谓的 enable-fields,在大多数情况下是 disabled,endtime,fe_group , starttime 并通过 $GLOBALS['TCA'][$table]['ctrl']['enablecolumns'].

配置

要抑制 pid-check,您应该使用 setRespectStoragePage(false)。对于 sys_language 有一个 setRespectSysLanguage(false)。而cruser_id根本没有勾选,可以略过