在TYPO3 / Extbase中使用AND和OR的嵌套查询

时间:2015-08-06 13:04:19

标签: typo3 extbase nested-queries

我需要为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);

这不起作用:-(我试图调试,但我发现我的代码中没有错误迹象。如果有人可以帮助我,那就太好了。

1 个答案:

答案 0 :(得分:2)

总结评论:

如果您的记录不在配​​置的persistence-pid plugin.tx_yourext.persistence.storagePid中,或者您根本没有配置持久性存储,那么您需要禁用pid-checks。

setEnableFieldsToBeIgnored只能应用于所谓的 enable-fields ,在大多数情况下,已禁用,endtime,fe_group,starttime 并通过{{ 1}}。

要禁止 pid - 检查,您应该使用$GLOBALS['TCA'][$table]['ctrl']['enablecolumns']。对于 sys_language ,有一个setRespectStoragePage(false) cruser_id 根本没有检查过,所以你可以跳过它。