tags:

views:

251

answers:

1

Hello,

I created a function that has a infinite loop and a delay at the end to make sure it will only execute one time per second.

This function is in a shell class and its goal is to save/update records in three different tables and I invoque it from the console line using the command 'cake className'

My problem is:

I stop the loop at the console (Ctrl + C) and only the last record is saved in the database.

I don't know if there is some problems with transaction, i tried to use begin() before save and commit after, but the problem subsisted.

The code is something like this:

$this->T1->begin();
$this->T2->begin();
$this->T3->begin();

 if ($this->T1->save((array (
    'Field1' => $val1,
    'Field2' => $val2,
    'Field3' => $val3))) 
    && $this->T2->save(array (
      'Field1' => $val4,
      'Field2' => $val5,
      'Field3' => $val6))) 
    && $this->T3->saveField('Field1', $val7)) 
 {
      $this->T1->commit();
      $this->T2->commit();
      $this->T3->commit();

      echo 'success message';
 }
+2  A: 

It could be because the id is still present in each of the models which often happens when saving in a loop because the data gets merged.

Try the following to reset the models so they don't load in the previous data.

$this->Sale->create(false);
$this->Bidagent->create(false);
$this->Licitation->create(false);

From your code snippet though i'm not sure what T1, T2 and T3 are... if they are models then they need the same $this->Model->create(false);

Reference:

Benjamin Pearson
Forgot to edit... T1, T2 and T3 are the Sale Bidagent and Licitation... Thank you that worked perfectly... Only had to put that for the Licitation model cause was the only one creating new rows, the others were only updating. Thanks
NoOne