TYPO3 v9 Scheduler不持久化数据



我有一个函数,它从JSON文件加载数据并将其输入TYPO3数据库。如果我通过后端控制器(indexAction)调用此函数,则一切正常。但是,当我从任务中调用它时,数据不会保存。通过测试输出,我看到对象被正确更改,只有UpdateAdd没有正确执行,因为数据库中的数据没有更改。

这是我的控制器功能:

class ImportController extends TYPO3CMSExtbaseMvcControllerActionController
{
protected $siteRepository = null;
public function injectSiteRepository(SiteRepository $siteRepository)
{
$this->siteRepository = $siteRepository;
}
public function indexAction()
{ 
$this->dataImport();
}
public function dataImport() {
$file = "test.json";
$json = file_get_contents($file);
$jsonarray = json_decode($json);
foreach ($jsonarray->{'sites'} as $site) {
$newValue = false;
$dbSite = $this->siteRepository->getSiteByID($site->{'ID'});
if (empty($dbSite->getFirst())) {
$dbSite = TYPO3CMSCoreUtilityGeneralUtility::makeInstance('testtest123DomainModelSite');
$dbSite->setID($site->{'ID'});
$newValue = true;
} else {
$dbSite = $dbSite->getFirst();
}
//Set Data
$dbSite->setTest($site->{'TEST'});
//This object is correct, even in the Task
DebuggerUtility::var_dump(
$dbSite
);
//Update or Add new Data
if (!$newValue) {
$this->siteRepository->update($dbSite);
} else {
$this->siteRepository->add($dbSite);
}
}
$persistenceManager = TYPO3CMSCoreUtilityGeneralUtility::makeInstance('TYPO3CMSExtbasePersistenceGenericPersistenceManager');
$persistenceManager->persistAll();
return true;
}
}

这是我的任务:

class JsonImportTask extends AbstractTask {
public function execute() {
$objectManager = GeneralUtility::makeInstance(
ObjectManager::class
);
$controller = $objectManager->get(ImportController::class);
$controller->dataImport();
return true;
}
}

这里是我的仓库:

public function getSiteByID($id) {
$query = $this->createQuery();
$query->matching(
$query->equals("uid", $id),
);
return $query->execute();
}

有人知道这可能是什么吗?

好了,我自己发现了我的错误。这里是所有有同样问题的人的解决方案:

我在SiteRepository的getSiteByID函数中添加了setRespectStoragePage:

$query->getQuerySettings()->setRespectStoragePage(false);

错误是它正在寻找StoragePid1的数据。使用这个命令,他在正确的位置搜索

下面是我正确的存储库函数:

public function getSiteByID($id) {
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(false);
$query->matching(
$query->equals("uid", $id),
);
return $query->execute();
}

我有另一个问题。您必须为新条目设置PID号。

例如,我的数据存储在Page ID 12.

我在这里添加了这一行:

if (empty($dbSite->getFirst())) {
$dbSite = TYPO3CMSCoreUtilityGeneralUtility::makeInstance('testtest123DomainModelSite');
$dbSite->setID($site->{'ID'});
$newValue = true;
$dbSite->setPid(12); //New Line set PID (For me to PID 12)
} else {
$dbSite = $dbSite->getFirst();
}

最新更新