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
相关产品推荐
相关产品推荐

