Typo3 Define storagePid for CommandController command

1k views Asked by At

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

1

There are 1 answers

0
René Pflamm On BEST ANSWER

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.