CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 31-07-2008 22:52:48

lcLukas
Pitivier
Date d'inscription: 24-07-2008
Messages: 11

Multi-enregistrement

Bonjour,

Je cherche à faire un enregistrement multiple. C'est à dire, à enregistrer plusieurs entrées de table à la fois.
Or quand j'ai un tableau data ($this->data) du genre :

Code: php

  1. [url]=> array(
  2.     [0] => array(
  3.         [id] => valeur0
  4.         [serveur] => valeur0
  5.         [url]=> valeur0
  6.     )
  7.     [1] => array(
  8.         [id] => valeur1
  9.         [serveur] => valeur1
  10.         [url]=> valeur1
  11.     )...
  12. )

ou alors

Code: php

  1. [0] => array(
  2.     [url]=> array(
  3.         [id] => valeur0
  4.         [serveur] => valeur0
  5.         [url]=> valeur0
  6.     )
  7. )
  8. [1]
  9.     [url]=> array(
  10.         [id] => valeur1
  11.         [serveur] => valeur1
  12.         [url]=> valeur1
  13.     )
  14. )...

et que j'enregistre ... rien du tout.
du coup ce que j'ai fait c'est un :
foreach sur les valeur pour les enregistrer une par une ... sauf que là ça fait un update sur les valeur suivantes.

Je pense qu'une solution "moche" serait de faire un foreach sur chaque valeur (comme précédemment) et de mettre le $this->Url->id à NULL.
Mais, j'ai pas eu le temps de tester (donc je sais pas encore si ça marche) et je trouce ça pas très esthétique d'un point de vue prog.

Hors ligne

 

#2 31-07-2008 23:07:01

foxmask
Clafoutiche
Date d'inscription: 25-06-2008
Messages: 195
Site web

Re: Multi-enregistrement

Bonsoir,
je n'ai pas encore abordé ce sujet mais ca tourne autour de :
$this->Url->saveAll()
il me semble

cdt.

Hors ligne

 

#3 01-08-2008 13:04:24

real34
Cooker
Lieu: Toulouse
Date d'inscription: 28-06-2008
Messages: 1810
Site web

Re: Multi-enregistrement

Oui, foxmask a raison normalement un saveAll associé à ta première solution fonctionne (en tout cas je l'utilise !).

Je ne sais pas si cela y jour, mais le tableau [url]correspondant à ton modèle ne devrait-il pas être en majuscule ?
Sinon, comment essaye tu de sauvegarder ?

Cependant, pour ton problème dans le foreach, je pense que cela vient du fait que le $this->Url->id est fixé automatiquement par Cake suite à la première sauvegarde. Il te faut donc le réinitialiser à chaque entrée dans ta boucle ... mais le saveAll est quand même plus propre big_smile


Expert CakePHP - Co-gérant du studio web Occitech

Hors ligne

 

#4 02-08-2008 12:25:39

lcLukas
Pitivier
Date d'inscription: 24-07-2008
Messages: 11

Re: Multi-enregistrement

Bon quand je fais un saveAll de

Code: php

  1. (
  2.     [url]=> Array
  3.         (
  4.             [0] => Array
  5.                 (
  6.                     [episode_id] => 62
  7.                     [type] => LD
  8.                     [serveur] => test1
  9.                     [url]=> test1
  10.                     [partie] => 0
  11.                 )
  12.             [1] => Array
  13.                 (
  14.                     [episode_id] => 62
  15.                     [type] => LD
  16.                     [serveur] => test2
  17.                     [url]=> test2
  18.                     [partie] => 0
  19.                 )
  20.             [2] => Array
  21.                 (
  22.                     [episode_id] => 62
  23.                     [type] => LD
  24.                     [serveur] => test3
  25.                     [url]=> test3
  26.                     [partie] => 0
  27.                 )
  28.             [3] => Array
  29.                 (
  30.                     [episode_id] => 62
  31.                     [type] => LD
  32.                     [serveur] => test4
  33.                     [url]=> test4
  34.                     [partie] => 0
  35.                 )
  36.         )
  37. )

comme requête sql j'obtiens : "START TRANSACTION" suivis de "COMMIT" au lieu de (j'imagine) "INSERT INTO `urls` (`episode_id`, `type`, `serveur`, `url`, `partie`) VALUES ('62', 'LD', 'test1', 'test1', '0'), ..."

Hors ligne

 

#5 04-08-2008 15:18:58

djenvert
Baker
Lieu: Paris
Date d'inscription: 07-07-2008
Messages: 154
Site web

Re: Multi-enregistrement

oui, comme il le dit Real34, il faut que tu fasses un create() à chaque itération, sinon, ça update.
Néanmoins, ta première solution devrait fonctionner. Je l'ai utilisée aussi. Il y a un gars qui est en train de commencer une série de tutorials sur le sujet, cf ici : http://teknoid.wordpress.com/2008/08/01 … le-models/

à suivre.

Hors ligne

 

#6 04-08-2008 16:07:48

real34
Cooker
Lieu: Toulouse
Date d'inscription: 28-06-2008
Messages: 1810
Site web

Re: Multi-enregistrement

Ce tutorial semble en effet tres important et utile !
lcLukas, pourrais-tu nous montrer egalement les parties essentielles de ton controlleur et du formulaire afin que nous puissions faire quelques tests ?


Expert CakePHP - Co-gérant du studio web Occitech

Hors ligne

 

#7 05-08-2008 09:39:06

djenvert
Baker
Lieu: Paris
Date d'inscription: 07-07-2008
Messages: 154
Site web

Re: Multi-enregistrement

Le deuxième partie du tuto est en ligne là : http://teknoid.wordpress.com/2008/08/04 … -and-tips/

Hors ligne

 

Pied de page des forums

Propuls� par FluxBB
Traduction par FluxBB.fr