---
title: "Mehrere Domain Objects auf ein Mal erszeugen und speichern"
url: "https://www.typo3.net/d/106272-mehrere-domain-objects-auf-ein-mal-erszeugen-und-speichern"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage"]
created: "2011-07-12"
last_reply: "2011-07-13"
replies: 2
solved: false
page: 1
pages: 1
lang: "de"
---

# Mehrere Domain Objects auf ein Mal erszeugen und speichern

Extensions › Extbase · 2 Antworten · gestartet 2011-07-12

## Eröffnungsbeitrag

**Unbekannter Benutzer** · 2011-07-12 · [Beitrag #1](https://www.typo3.net/d/106272-mehrere-domain-objects-auf-ein-mal-erszeugen-und-speichern/1)

Hi,

ich hab ein Backend-Modul geschrieben, welches mir "On The Fly" beliebig viele Datensätze in die Datenbank speichern soll.

Im View hab ich ein Formular mit einem Textfeld, wo ich die Anzahl der zu erzeugenden Datensätze eintrage. Wenn das Formular abgeschickt wird, wird folgende Action-Funktion aufgerufen:

```php
<?php
/**
 * 
 * @param array $generateActivationCodesForm
 * 
 * @return string
 */
public function generateCodesAction($generateActivationCodesForm=array()) {
	if(isset($generateActivationCodesForm['amount'])) {
		$count = intval($generateActivationCodesForm['amount']);
		while($count > 0) {
			$code = substr(mt_rand(0, time()), 0, 8 );
			$activationCode = t3lib_div::makeInstance('Tx_MyExt_Domain_Model_ActivationCode', $code);
			$this->activationCodeRepository->add($activationCode);
			$count--;
		}

		$addedActivationCodes = $this->activationCodeRepository->getAddedObjects();
		if($addedActivationCodes) {
			$this->view->assign('addedActivationCodes', $addedActivationCodes);
		}
	}
}
?>
```

Mein Problem ist folgendes:

In der Datenbank ist ein Feld (**code**) als UNIQUE eingetragen, Werte in diesem Feld dürfen also nur ein Mal vorkommen. Die **while**-Schleife wird brav durchlaufen, am Ende erhalte ich jedoch folgende Fehlermeldung:

**Tx_Extbase_Persistence_Storage_Exception_SqlError
Duplicate entry '' for key 2**

Wenn ich z.B. 10 Datensätze anlegen möchte, dann läuft die Schleife auch 10 Mal (hab ich debugged) aber in der Datenbank liegt nur ein einziger, leerer Datensatz.

Der hier generierte Code in **$code** ist zufallsgeneriert und sollte eigentlich nicht zwei mal vorkommen.

Woran kann das liegen, dass die Datensätze nicht gespeichert werden?

Vielen Dank schon mal :)

Gruß.

## Antworten

### [#2](https://www.typo3.net/d/106272-mehrere-domain-objects-auf-ein-mal-erszeugen-und-speichern/2) · Unbekannter Benutzer · 2011-07-13

Hab herausgefunden, dass wenn ich die **while**-Schleife weglasse und somit beim Ausführen des Formulars immer nur einen Datensatz erzeuge und in die Datenbank speichere, dass es dann problemlos funktioniert.

```php
<?php
/**
 * 
 * @param array $generateActivationCodesForm
 * 
 * @return string
 */
public function generateCodesAction($generateActivationCodesForm=array()) {
	if(intval($generateActivationCodesForm['amount']) > 0) {
		$code = substr(mt_rand(0, time()), 0, 8 );
		$activationCode = t3lib_div::makeInstance('Tx_MyExt_Domain_Model_ActivationCode', $code);
		$this->activationCodeRepository->add($activationCode);

		$addedActivationCodes = $this->activationCodeRepository->getAddedObjects();
		if($addedActivationCodes) {
			$this->view->assign('addedActivationCodes', $addedActivationCodes);
		}
	}
}
?>
```

D.h. der Fehler muss an der Ezeugen/Speichern mehrerer Objekte liegen, oder?

Wie macht man es richtig?

### [#3](https://www.typo3.net/d/106272-mehrere-domain-objects-auf-ein-mal-erszeugen-und-speichern/3) · Unbekannter Benutzer · 2011-07-13

Ich denke ich habs! :)

Die Lösung steht hier -> [/d/92124-uid-eines-soeben-erstellen-datensatzes-ermitteln](https://www.typo3.net/d/92124-uid-eines-soeben-erstellen-datensatzes-ermitteln)

In diesem Beitrag hab ich gelesen, dass die Repository Funktion **add()** Objekte ohne UIDs erzeugt und man das manuell erzwingend muss durch:

```php
$persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
$persistenceManager->persistAll();
```

Meine endgültige Funktion sieht nun so aus und es scheint alles zu funktionieren:

```php
<?php
/**
 * 
 * @param array $generateActivationCodesForm
 * 
 * @return string
 */
public function generateCodesAction($generateActivationCodesForm=array()) {
	$count = intval($generateActivationCodesForm['amount']);
	if($count > 0) {
		$persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
		while($count > 0) {
			$code = substr(mt_rand(0, time()), 0, 8 );
			if(!$this->activationCodeRepository->findByCode($code)) {
				$activationCode = t3lib_div::makeInstance('Tx_MyExt_Domain_Model_ActivationCode', $code);
				$this->activationCodeRepository->add($activationCode);
				$persistenceManager->persistAll();
			}
			$count--;
		}
		$addedActivationCodes = $this->activationCodeRepository->getAddedObjects();
		if($addedActivationCodes) $this->view->assign('addedActivationCodes', $addedActivationCodes);
	}
}
?>
```

---

Quelle: „Mehrere Domain Objects auf ein Mal erszeugen und speichern“, typo3.net, https://www.typo3.net/d/106272-mehrere-domain-objects-auf-ein-mal-erszeugen-und-speichern
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
