Mehrere Datensätze in einer Schleife speichern ??? [Gelöst]

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 09:48

    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?

    1. foreach ($argumente['newCheckValues']['valueCheck'] as $value){
    2. $wert .= $value;
    3. $newCheckValues->setValueCheck($wert);
    4.  
    5. $this->checkValuesRepository->add($newCheckValues);
    6. }

    Gruß
    mimaxx


  • 1
  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    06. 09. 2012, 10:13

    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...

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 10:51

    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.

    1. <f:form action="create" enctype="multipart/form-data" name="newChecks" object="{newChecks}">
    2. <f:form.textarea name="description" id="description" property="description" value="" cols="30" rows="5" /><br>
    3. ...
    4. <f:for each="{checklists.options}" as="options_value">
    5. ...
    6. {options_value.title}: <f:form.textfield name="newCheckValues[valueCheck][]" value="" />
    7. ...
    8. </f:for>
    9. ...
    10. </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.

    1. public function createAction(Tx_MyExt_Domain_Model_Checks $newChecks, $newCheckValues) {
    2.  
    3. $argumente = $this->request->getArguments();
    4.  
    5. foreach ($argumente['newCheckValues']['valueCheck'] as $key => $value){
    6. $wert .= $value;
    7. $newCheckValues->setValueCheck($value);
    8. $this->checkValuesRepository->add($newCheckValues);
    9. }
    10. $this->checksRepository->add($newChecks);
    11. ...
    12. }

    Gruß
    mimaxx

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    06. 09. 2012, 10:58

    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?

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 11:12

    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.

    1. $persistenceManager = t3lib_div::makeInstance('Tx_Extbase_Persistence_Manager');
    2. $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

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 11:18

    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="" />

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    06. 09. 2012, 11:28

    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...

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 11:53

    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

    1. foreach ($argumente['newCheckValues']['valueCheck'] as $key => $value){
    2.  
    3. $newCheckValues->setValueCheck($value);
    4. $this->checkValuesRepository->add(new Tx_MyExt_Domain_Model_CheckValues($newCheckValues));
    5.  
    6. }

  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    06. 09. 2012, 13:44

    Puh endlich :-)

    Vielen vielen Dank nochmal für Deinen entscheidenden Hinweis! Jetzt habe ich die Lösung:

    1. foreach ($argumente['newCheckValues']['valueCheck'] as $value){
    2. $newCheckValues = new Tx_MyExt_Domain_Model_CheckValues();
    3. $newCheckValues->setValueCheck($value);
    4. $this->checkValuesRepository->add($newCheckValues);
    5. }

    Gruß
    mimaxx

  • 1