TYPO3:按父分类与PID筛选分类时出现SQL列不存在错误
问题
需求为先展示父分类,点击后展示对应子分类。为此编写了findByPidAndParent查询方法,单独按pid或父ID筛选时正常,但组合筛选时出现错误:Unknown column 'sys_category.pid_and_parent' in 'where clause',使用的是TYPO3系统分类。
提供的代码
Action 代码
public function listAction($parentId = null, $pageId = null) { //pageID $currentPid = $GLOBALS['TSFE']->id; // storagePid $myStoragePid = $this->settings['storagePid']; $categories = $this->categorieRepository->findByPidAndParent($myStoragePid, $parentCategoryId); $this->view->assignMultiple([ 'categories' => $categories ]); }
Repository 代码
/** * @param int $pid * @param int|null $parentCategoryId * @return mixed */ public function findByPidAndParent(int $pid, $parentCategoryId) { $query = $this->createQuery(); $query->getQuerySettings()->setRespectStoragePage(FALSE); $query->getQuerySettings()->setRespectSysLanguage(FALSE); $constraint[] = $query->equals("pid", $pid); $constraint[] = $query->equals("parent", $parentCategoryId); return $query->matching($query->logicalAnd($constraint))->execute(); }
解决方案
这个错误源于TYPO3的Repository命名规则:当方法名遵循findByXAndY格式时,TYPO3会自动尝试查找名为x_and_y的数据库字段,而非将两个条件做逻辑与组合。
解决方式有两种:
- 重命名方法:修改方法名,避开
findByXAndY的自动解析规则,比如改为findCategoriesByPidAndParent,这样TYPO3会执行你自定义的查询逻辑。 - 修正变量与逻辑:同时注意Action中存在变量未定义的问题——
$parentCategoryId未声明,需替换为方法参数$parentId。
修改后的Repository方法示例:
/** * @param int $pid * @param int|null $parentCategoryId * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface */ public function findCategoriesByPidAndParent(int $pid, $parentCategoryId) { $query = $this->createQuery(); $query->getQuerySettings()->setRespectStoragePage(false); $query->getQuerySettings()->setRespectSysLanguage(false); $constraints = []; $constraints[] = $query->equals('pid', $pid); $constraints[] = $query->equals('parent', $parentCategoryId); return $query->matching($query->logicalAnd($constraints))->execute(); }
修改后的Action代码片段:
$categories = $this->categorieRepository->findCategoriesByPidAndParent($myStoragePid, $parentId);
内容的提问来源于stack exchange,提问作者moho123
相关产品推荐
相关产品推荐

