[TYPO3-mvc] Calling persistAll() inside a loop

Kevin Ulrich Moschallski km at 3digit.de
Wed Dec 29 19:30:46 CET 2010


Hi Franz,

great approach, works like a charm.

Thank you very much!

Regards,
Kevin

On 2010-12-29 19:05:35 +0100, Franz Koch said:

> On 29.12.2010 18:49, Kevin Ulrich Moschallski wrote:
>> Hi list,
>> 
>> i'm currently trying to import a list of references via soap.
>> 
>> I loop through all results from soap an add the references. Each
>> reference object contains a fe_user object, an tt_address object and a
>> reference category object.
>> 
>> The categories are created inside the same loop and here comes my
>> problem. I check via the reference category respository if a category
>> already exist, if not a create a new object and do a repository->add().
>> 
>> I noticed, that i get duplicated categories because when the next run of
>> the loop comes to the point where it checks for the category the
>> category isn't persisted yet. Sure this is because the controller calls
>> persistAll() only at the end of each call.
> ...
>> My question now is, is there a other approach to persist inside a loop?
>> Could i add a new category controller and call this to add a new
>> category? Maybe with DI?
> 
> how about simply implementing a category cache in your import method?
> 
> /**
>   * Your category cache
>   * @var array
>   */
> protected $categoryCache = array();
> 
> 
> /**
>   * is resolving a category object by it's name.
>   * @var string $name The name of the category
>   * @return Tx_YourExt_Domain_Model_Category
>   */
> protected function getCategoryByName($name) {
> 	if (!isset($this->categoryCache[$name])) {
> 		$category = $this->categoryRepository->findOneByName($name);
> 		if (!empty($category)) {
> 			$this->categoryCache[$name] = $category;
> 		} else {
> 			$newCategory = $this->createCategoryObject($referenceArray['categories']);
> 			$this->categoryRepository->add($newCategory);
> 			$this->categoryCache[$name] = $newCategory;
> 		}
> 	}
> 	return $this->categoryCache[$name];
> }
> 
> 
> public function import() {
> 	//your loop
> 	if ($referenceArray['categories']) {
> 		$userObject->setCategory( 
> $this->getCategoryByName($referenceArray['categories']));
> 	}
> }
> 
> 
> The persistence in then only done once at the end of the import.




More information about the TYPO3-project-typo3v4mvc mailing list