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

TYPO3 11.5调度任务中Repository的findByJob始终返回NULL

TYPO3 11.5 Extbase调度任务findByJob返回NULL的排查点

以下是针对你遇到问题的具体排查和解决方向:

  • 确认存储页ID(storagePid)的正确配置
    调度任务运行在CLI环境,不会自动继承前端的storagePid配置,即使你在Repository里设置了默认值也可能不生效。需要手动为Repository设置存储页ID:

    // 在调度任务的execute方法中
    $jobOfferRepository = GeneralUtility::makeInstance(JobOfferRepository::class);
    $querySettings = $jobOfferRepository->createQuery()->getQuerySettings();
    // 替换为你的实际存储页ID数组,支持多个ID
    $querySettings->setStoragePageIds([123]);
    $querySettings->setRespectStoragePage(true);
    $jobOfferRepository->setDefaultQuerySettings($querySettings);
    
  • 检查模型与数据库字段的映射
    确认JobOffer模型中的job_id和job_title属性是否正确映射到数据库字段:

    • 模型属性是否添加了正确的@ORM\Column注解,比如:
      /**
       * @var int
       * @ORM\Column(type="integer", name="job_id")
       */
      protected int $jobId;
      
    • 数据库字段名是否与映射的name值完全一致,注意大小写和下划线/驼峰的转换。
  • CLI环境下的enableFields过滤
    默认Extbase查询会过滤掉隐藏(hidden=1)、已删除(deleted=1)或不在有效期内的记录,而CLI环境不会自动忽略这些过滤。如果你的职位记录处于非活跃状态,可以关闭enableFields检查:

    $querySettings->setIgnoreEnableFields(true);
    // 若需要,同时忽略已删除的记录
    $querySettings->setEnableFieldsToBeIgnored(['deleted']);
    
  • 验证数据库数据的准确性
    直接执行SQL查询确认目标记录存在:

    SELECT * FROM tx_myextension_domain_model_joboffer WHERE job_id = 253 AND job_title = 'Lagermitarbeiter';
    

    注意检查字符串的大小写、空格或特殊字符是否完全匹配。

  • Repository实例化与上下文初始化
    手动用GeneralUtility::makeInstance实例化Repository时,可能没有正确初始化Extbase的持久化上下文。可以尝试通过依赖注入获取Repository(需要在Configuration/Services.yaml中配置):

    MyCompany\MyExtension\Task\ImportJobsTask:
      arguments:
        $jobOfferRepository: '@MyCompany\MyExtension\Domain\Repository\JobOfferRepository'
    

    然后在Task类中注入:

    use MyCompany\MyExtension\Domain\Repository\JobOfferRepository;
    
    class ImportJobsTask extends AbstractTask
    {
        public function __construct(
            protected JobOfferRepository $jobOfferRepository
        ) {
            parent::__construct();
        }
    
        public function execute()
        {
            $job = ['id' => 253, 'title' => 'Lagermitarbeiter'];
            $job = $this->jobOfferRepository->findByJob($job);
            DebuggerUtility::var_dump($job);
            return true;
        }
    }
    
  • 排查查询缓存问题
    Extbase的查询缓存可能返回旧结果,可在查询中禁用缓存:

    public function findByJob(array $job)
    {
        $query = $this->createQuery();
        $query->getQuerySettings()->setCacheable(false);
        // 剩余查询逻辑...
    }
    

内容的提问来源于stack exchange,提问作者cari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 03:52:32