简体   繁体   中英

TYPO3 v9 Scheduler does not persist the data

I have a function that loads data from a JSON file and enters it into the TYPO3 database. If I call this function via the backend Controller ( indexAction ), then everything works fine. However, when I call it from a task, the data is not saved. By means of test output I see that the object was changed correctly, only the Update or Add is not executed correctly, because the data in the database is not changed.

Here is my controller function:

class ImportController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
    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 = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('test\test123\Domain\Model\Site');
                $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 = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager');
        $persistenceManager->persistAll();
        return true;
    }
}

Here is my task:

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

        return true;
    }
}

Here my repository:

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

Does anyone have an idea what this could be?

Ok I found my mistake myself. Here is the solution for all who have the same problem:

I added setRespectStoragePage in my getSiteByID function in SiteRepository:

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

The error was that it was looking for the data at StoragePid 1. With this command he searches at the right place

Here is my correct repository function:

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

I had another problem. You have to set the PID number for new entries.

For example, my data is stored on Page ID 12.

I added this line here:

if (empty($dbSite->getFirst())) {
    $dbSite = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('test\test123\Domain\Model\Site');
    $dbSite->setID($site->{'ID'});
    $newValue = true;
    $dbSite->setPid(12); //New Line set PID (For me to PID 12)
} else {
    $dbSite = $dbSite->getFirst();
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM