在TYPO3中的查询中获取不需要的where子句
我正在编写一个查询,通过在TYPO3中的查询中获取不需要的where子句,typo3,typo3-8.x,typo3-extensions,Typo3,Typo3 8.x,Typo3 Extensions,我正在编写一个查询,通过createQuery()获取记录。在检查SQL时,有一个where子句如下: WHERE(`sys\u category`.`pid`IN(47,0)) 这里的47是保存我的记录的sys\u文件夹ID,但问题是类别存储在另一个具有不同ID的文件夹中,因此它无法在sys\u category表中找到47ID。如何重写/修复此where子句 此外,是否需要将与我的记录关联的类别与记录放在同一文件夹中?如果是,原因是什么?您可以使用$defaultQuerySettings更
createQuery()
获取记录。在检查SQL
时,有一个where
子句如下:
WHERE(`sys\u category`.`pid`IN(47,0))
这里的47
是保存我的记录的sys\u文件夹
ID,但问题是类别存储在另一个具有不同ID的文件夹中,因此它无法在sys\u category
表中找到47
ID。如何重写/修复此where
子句
此外,是否需要将与我的记录关联的类别与记录放在同一文件夹中?如果是,原因是什么?您可以使用
$defaultQuerySettings
更改它搜索的PID
您可以在实例化对象()
方法中设置它,并将其用于每个查询,也可以在findBy方法中设置它
$querySettings = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings::class);
// here you can search on all PIDs
$querySettings->setRespectStoragePage(false);
// here you can set special PIDs
$querySettings->setStoragePageIds([12, 15, 38]);
// Set the setting
$this->setDefaultQuerySettings($querySettings);
上下文中的
$this
是存储库吗?我应该在创建查询对象之前使用它吗?在createQuery方法中已经有这样一个赋值if($this->defaultQuerySettings!==null){$query->setQuerySettings(clone$this->defaultQuerySettings);}
在执行查询之前,而不是在创建查询之前,您需要这个赋值。为了更好地阅读,我将把这段代码放在你的存储库方法的顶部。这个分配很奇怪,它阻止了对查询设置的任何更改。我强烈建议删除它。我像这样使用它$query->setQuerySettings($querySettings)代码>成功了。谢谢