La comunità italiana su CakePHP

You are not logged in. Please login or register.


Pages: 1

Atom RSS

Posts [ 11 ]

by_spix

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:)

by_spix

Re: Molti record da aggiornare dalla stessa pagina

una piccola dritta? o un codice di esempio che aggiorna diversi record da una sola form?roll

pineye

Re: Molti record da aggiornare dalla stessa pagina

usa foreach anche per salvare, ma ad ogni ciclo chiama la funzione create() del modello!

pineye

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)

by_spix

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);
    }

Namaless

Re: Molti record da aggiornare dalla stessa pagina

Il modo è valido e funzionante?

by_spix

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.

pineye

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();
            }

Namaless

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?? hmm

by_spix

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?

Namaless

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.

Pages: 1

Topic info

1 guests and 0 users are reading this topic now


Forum quick jump menu

Currently used extensions: pun_topic_online_users, pun_karma, pun_admin_hook_navigator, pun_bbcode. Copyright © 2008 PunBB

[ Generated in 0.694 seconds, 10 queries executed ]