Search code examples
typo3schedulertyposcriptextbasetypo3-6.2.x

Typo3 Define storagePid for CommandController command


I would like to import different data using a CommandController (scheduler). I allready figured out that it is possible to set a global storagePid like:

module.tx_myextension.persistence.storagePid = 123

source: https://worksonmymachine.org/blog/commandcontroller-and-storagepid

That works fine, but my extension contains multiple models which should be saved on different Pid's

I also found an old post where someone said it is possible to define a pid for each model which would be exactly what I need:

module.tx_myextension.persistence.classes.tx_myextension_domain_model_player.storagePid = 124
module.tx_myextension.persistence.classes.tx_myextension_domain_model_customer.storagePid = 125

source: https://typo3-german.typo3.narkive.com/WxjjtxXa/scheduler-storage-pid

But it seems like this lines get ignored. Is this the correct way or do I do something wrong?

I am on TYPO3 6.2.44


Solution

  • I suggest to create params for the controller action. For each model a storage pid.

    so you have myCommand($domain1Pid, $domain2Pid,$domain3Pid, ...)

    Now as first call in your function you get the querySettings for the repositories and apply the storage pids:

    $querySettings = $this->domain1Repository->createQuery()->getQuerySettings();
    $querySettings->setStoragePageIds([$domain1Pid]);
    $this->domain1Repository->setDefaultQuerySettings($querySettings);
    

    repeat this for each repository. In the scheduler job settings or cli you can now define the pids for each storage.

    btw: you can also use $domain->setPid(123) to set the pid of each model where to save.