- Title: Member
- Status: Offline
- From: Pavia
- Registered: 22-07-2008
- Posts: 29
Topic: Molti record da aggiornare dalla stessa pagina
Ho trafugato tra manuale e api ma non riesco a capire come posso fare un update non su un singolo id ma su vari.
Ho una pagina con l'elenco di tanti input radio su un campo SI_NO e il submit deve aggiornare quel campo ad una ventina di record. Quindi anzichè passare un solo id alla funzione che salva dovrò passargli un array, ma come faccio?
Parto dalla vista con l'elenco dove all'input ho concatenato al nome del campo l'id anche se non so poi come usarlo.
<?=$form->create('GamesPlayer',array('action' => 'salva'));
foreach ($GamesPlayers as $risposte):
$form->input("si_no.".$risposte['GamesPlayer']['id'], array("type"=>"radio","legend"=>" ","separator"=>"<hr>",
"options" => array("N"=>"NO","S"=>"SI","B"=>"Forse")));
...
endforeach;
?>
nel controller dovrò creare l'azione salva a cui penso gli dovrò passare un array carico di id ...e poi? posso usare sempre il metodo Model::save? ho provato ad usare foreach anche per salvare ma non mi sembra che l'accetti.
scusate ancora l'inesperienza:)
- Title: Member
- Status: Offline
- From: Pavia
- Registered: 22-07-2008
- Posts: 29
Re: Molti record da aggiornare dalla stessa pagina
una piccola dritta? o un codice di esempio che aggiorna diversi record da una sola form?
- Title: New member
- Status: Offline
- Registered: 19-06-2008
- Posts: 6
Re: Molti record da aggiornare dalla stessa pagina
usa foreach anche per salvare, ma ad ogni ciclo chiama la funzione create() del modello!
- Title: New member
- Status: Offline
- Registered: 19-06-2008
- Posts: 6
Re: Molti record da aggiornare dalla stessa pagina
Questo è il procedimento, poi devi stare attento a passare l'array $data formattato correttamente
foreach($this->data['GamesPlayer'] as $data)
{
$this->GamesPlayer->create();
$this->GamesPlayer->save($data);
}
Last edited by pineye (14-08-2008 09:08:39)
- Title: Member
- Status: Offline
- From: Pavia
- Registered: 22-07-2008
- Posts: 29
Re: Molti record da aggiornare dalla stessa pagina
Ho trovato il modo, in realtà però senza usare il create() perchè senno mi faceva l'insert anzichè l'update
if (isset($this->data['GamesPlayer']['si_no'])) {
foreach($this->data['GamesPlayer']['si_no'] as $key=>$value)
{
$this->GamesPlayer->id=intval($key);
$this->GamesPlayer->save(array('si_no'=>$value,'note'=>$this->data['GamesPlayer']['note'][$key]));
}
$this->Session->setFlash('Le modifiche sono state salvate.',true);
}
- Title: Administrator
- Status: Offline
- From: Pisa
- Registered: 04-02-2008
- Posts: 102
Re: Molti record da aggiornare dalla stessa pagina
Il modo è valido e funzionante?
- Title: Member
- Status: Offline
- From: Pavia
- Registered: 22-07-2008
- Posts: 29
Re: Molti record da aggiornare dalla stessa pagina
Si, è funzionante dal punto di vista del salvataggio, l'unico inghippo è che, ricaricando la stessa pagina, non vedo subito le modifiche. Per vederle dovrei ricaricarla nuovamente. Ho cercato qua e la per capire come risolverlo ma ho poi abbandonato la cosa.
- Title: New member
- Status: Offline
- Registered: 19-06-2008
- Posts: 6
Re: Molti record da aggiornare dalla stessa pagina
Se non vuoi che create() inserisca un nuovo record puoi passargli come argomento l'array $data contenente ache l'id del record, e cakephp esegue update anziché insert!
foreach($this->data['GamesPlayer'] as $data)
{
// $data = array('id'=>$id .... .... );
$this->GamesPlayer->create($data);
$this->GamesPlayer->save();
}
- Title: Administrator
- Status: Offline
- From: Pisa
- Registered: 04-02-2008
- Posts: 102
Re: Molti record da aggiornare dalla stessa pagina
pineye wrote:Se non vuoi che create() inserisca un nuovo record puoi passargli come argomento l'array $data contenente ache l'id del record, e cakephp esegue update anziché insert!
Perdonami, ma con
$this->Model->save($this->data)
vengono già passati i dati.. perchè non farlo fare a cake?? 
- Title: Member
- Status: Offline
- From: Pavia
- Registered: 22-07-2008
- Posts: 29
Re: Molti record da aggiornare dalla stessa pagina
Faccio notare che il $this->data è costituito da un array con chiave [GamesPlayer] e due sotto array [si_no] e [note] i quali a loro volta hanno un array ciascuno con id => valore.
Array ( [GamesPlayer] => Array ( [si_no] => Array ( [37] => S [38] => N [39] => N [40] => S ) [note] => Array ( [37] => prima nota [38] => seconda nota [39] => terza nota [40] => quarta nota ) ) )
questo perchè nella vista per distinguere i record ho differenziato l'attributo name di ciascun input piazzandogli l'id davanti.
foreach ($GamesPlayers as $risposte){
$form->input("si_no.".$risposte['GamesPlayer']['id'],...)
$form->input('note.'.$risposte['GamesPlayer']['id'],...)
}
Ci sono altre soluzioni per generare un array pulito da dare in pasto a cake?
- Title: Administrator
- Status: Offline
- From: Pisa
- Registered: 04-02-2008
- Posts: 102
Re: Molti record da aggiornare dalla stessa pagina
by_spix wrote:Ci sono altre soluzioni per generare un array pulito da dare in pasto a cake?
Puoi provare a usare l'array del form impostando i names tipo "si_no[]".
<input type="text" name="si_no[]" class="input-text" />
Posts [ 11 ]
Guest posting is disabled. You must login or register to post a reply.
Topic info
0 guests and 0 users are reading this topic now
Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB