2015-08-24 2 views
1

Что я хочу сделать, это сохранить мои данные несколько раз. Для того, чтобы сделать это я ставлю этот код в моем контроллере:Save Multiples times Cakephp 3.x

foreach ($tw->statuses as $t) { 
      $tw->image = $t->user->profile_image_url; 
      $tw->name = $t->user->name; 
      $tw->screenname = $t->user->screen_name; 
      $tw->message = $t->text; 
      $tw->Fil_id = $FiltreId; 
      $this->Twes->save($tw); 
    } 
return $this->redirect(['action' => 'index']); 

Однако, когда исполнение будет сделано, я нашел только последнюю запись, сохраненную в моей базе данных, а не другие. Может кто-нибудь мне помочь ?

ответ

0

Это может происходить из-за различные вещи:

  1. Переменная $tw->statuses содержит только один статус.
  2. Таблица, в которой хранятся данные, имеет уникальный индекс, который сталкивается при вставке данных во второй раз.

Можете ли вы дать больше информации (например, описание таблицы или var_dump именованной переменной перед ее итерацией), чтобы точно определить, что происходит?

+0

Спасибо за ответ. когда я отлаживаю $ tw, он содержит более одного статуса (не менее 5). Я думаю, проблема заключается в том, что с помощью save(); данные, как вы сказали, сталкиваются, потому что в базе данных я нахожу, что было записано, это последние данные. – Sam

+0

@Sam, тогда проблема также может заключаться в том, что внутри 'foreach' вы мутируете экземпляр, который является' $ tw', и, возможно, именно поэтому сохраняется одна и та же строка, поэтому вы можете попытаться сделать следующее в первой строке внутри 'foreach'? '$ test = clone $ tw;' '$ test-> image = $ t-> user ...' и так далее – Gori

0

Я нашел, где проблема была. Я обновил свой код, и я использовал TableRegistry и использовал newEntity внутри моего Еогеаспа, как вы можете увидеть:

$oPeople = TableRegistry::get('Tweets'); 

    $oQuery = $oPeople->query(); 

    foreach ($tw->statuses as $t) { 
      $test = array($FiltreId,$t->text,$t->user->name,$t->user->screen_name,$t->user->profile_image_url,null,null,null,null,null); 
      $tw = $oPeople->newEntity($test); 
      $tw->image = $t->user->profile_image_url; 
      $tw->name = $t->user->name; 
      $tw->screenname = $t->user->screen_name; 
      $tw->message = $t->text; 
      $tw->Fil_id = $FiltreId; 
      $this->Twes->save($tw); 
    } 

    return $this->redirect(['action' => 'index']); 

Таким образом, все данные сохранены, а не только последнюю.

Смежные вопросы