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根本没有勾选,可以略过
我需要为 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根本没有勾选,可以略过