You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:42:28