Hallo,
hatte die Frage bereits in einem vorherigen Thread beschrieben nur ging es dort um ein anderes Grundproblem.
Möchte in der create function mehrere Datensätze über eine Schleife speichern. Die Schleife funktioniert soweit. Zum Test habe ich die Werte in eine Variable geschrieben nur leider wird nur ein Datensatz angelegt. Ist denn $this->checkValuesRepository->add($newCheckValues); richtig zum Anlegen?
foreach ($argumente['newCheckValues']['valueCheck'] as $value){
$wert .= $value;
$newCheckValues->setValueCheck($wert);
$this->checkValuesRepository->add($newCheckValues);
}
Gruß
mimaxx
Da müsste man jetzt etwas mehr über deinen Code wissen.
$newCheckValues ist ja anscheinend dein Objekt wo kommt das her?
Außerdem addest du ja immer genau dieses Objekt ins Repository, nicht verschiedene, insofern sehe ich nicht an welcher Stelle da verschiedene Datensätze angelegt werden sollten...
Hi Kitsunet,
danke für Deine schnelle Antwort. Habe folgenden Aufbau: Eine Checklist hier werden Optionen festgelegt, dann kann ein Check angelegt werden der sich die entsprechenden Optionen dynamisch aus der Checkliste holt. Die Werte werden dann in den CheckValues gespeichert. Bis auf das speichern der einzelnen Werte läuft schon alles. Aktuell befinde ich mich also in dem Check. Hier einmal die Form mit dem dynamischen Optionen habe es auf das wesentliche gekürzt.
<f:form action="create" enctype="multipart/form-data" name="newChecks" object="{newChecks}">
<f:form.textarea name="description" id="description" property="description" value="" cols="30" rows="5" /><br>
...
<f:for each="{checklists.options}" as="options_value">
...
{options_value.title}: <f:form.textfield name="newCheckValues[valueCheck][]" value="" />
...
</f:for>
...
</f:form>
In der create function hole ich mir dann das array der Optionen über $argumente = $this->request->getArguments(); da gibt es ja mehrere. Funktioniert auch soweit. Aber wie lege ich nun für jedes Element einen neuen Datensatz an? Das $wert .= $value; habe ich um zu sehen ob die Schleife funktioniert aber die läuft in dem einen Datensatz sind dann mehrere Daten.
public function createAction(Tx_MyExt_Domain_Model_Checks $newChecks, $newCheckValues) {
$argumente = $this->request->getArguments();
foreach ($argumente['newCheckValues']['valueCheck'] as $key => $value){
$wert .= $value;
$newCheckValues->setValueCheck($value);
$this->checkValuesRepository->add($newCheckValues);
}
$this->checksRepository->add($newChecks);
...
}
Gruß
mimaxx
Also dieses Model "Tx_MyExt_Domain_Model_Checks" soll jeweils einen check value enthalten oder wie soll das aussehen?
Du hast dein form an EIN object vom Typ "Tx_MyExt_Domain_Model_Checks" gebunden, d.h. der PropertyMapper erzeugt dir eines davon. Das fügst du dann der Persistence hinzu. Sonst musst du das anders machen. Aber da ist mir jetzt immer noch nicht genau klar, wie du es haben willst. Vielleicht erklärst du mal deine Models?
Also es gibt ein Model Checks. Da soll das Datum des Checks eine Beschreibung etc. rein.
Dann gibt es noch das Model CheckValues da kommen die Werte rein. Jeder Value soll später mit dem entsprechenden Check verknüpft sein.
So komme ich an die UID des gespeicherten Checks um sie dann in jeden CheckValue zu schreiben.
$persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
$uid = $newChecks->getUid();
Vom Ablauf wird also erst der Check gespeichert und danach über die Schleife die zugehörigen Werte der Optionen
Sorry ist irgenwie alles nicht so leicht zu erklären ... i do my very best ;-)
Gruß
mimaxx
Es läuft auch schon soweit dass er den Check in die eine Tabelle speichert und einen CheckValue in die andere Tabelle mit der wie oben geschriebenen UID des Checks. Knackpunkt ist halt dass er mehrere Values speichern soll daher die Schleife und das array <f:form.textfield name="newCheckValues[valueCheck][]" value="" />
Irgendwie ist das alles noch ein bisschen chaotisch. Eigentlich musst du doch nur in der Schleife jeweils new Tx_Whatever_Ich_kenn_den_namen_nicht_CheckValue(); und dann auf das neue Object jeweils den aktuellen Value setzen. Die müssten dann gespeichert werden. Aber das ist jetzt alles so einfach nicht zu erklären...
Ok es funktioniert zwar noch nicht aber ich weiss worauf du hinaus möchtest.
Habe jetzt mal ganz laienhaft folgendes probiert. So legt er auf jeden Fall schonmal die passende Anzahl an neuen Datensätzen an. verliert aber die Werte
foreach ($argumente['newCheckValues']['valueCheck'] as $key => $value){
$newCheckValues->setValueCheck($value);
$this->checkValuesRepository->add(new Tx_MyExt_Domain_Model_CheckValues($newCheckValues));
}
Puh endlich :-)
Vielen vielen Dank nochmal für Deinen entscheidenden Hinweis! Jetzt habe ich die Lösung:
foreach ($argumente['newCheckValues']['valueCheck'] as $value){
$newCheckValues = new Tx_MyExt_Domain_Model_CheckValues();
$newCheckValues->setValueCheck($value);
$this->checkValuesRepository->add($newCheckValues);
}
Gruß
mimaxx