Je ne comprends rien à ton "values" et je ne comprends pas pourquoi tu
te débarasses de l'id en cas d'ajout...

Il faut absolument que tu me montre tout ton code, sans cela je ne
peux pas voir d'où vient l'erreur.
Mais à mon avis et le formulaire et les modèles et les associations et
le save sont mal organisés.

Copie-colle ton code via le bin : http://bin.cakephp.org/
Il me faut le code de tes deux modèles, le code de ton contrôleur qui
fait le "add/edit" et le code de ton formulaire.

Voici ce que me donne un save sur un formulaire qui contient une HABTM
(Agregat HABTM Item) :

35      SELECT `AgregatsItem`.`item_id` FROM `agregats_items` AS
`AgregatsItem` WHERE `AgregatsItem`.`item_id` = 334             2       2       
1
36      DELETE `AgregatsItem` FROM `agregats_items` AS `AgregatsItem` WHERE
`AgregatsItem`.`item_id` IN (334, 334)          2               1
37      INSERT INTO `agregats_items` (`item_id`,`agregat_id`) VALUES
(334,'12'), (334,'11')

Et d'ailleurs, que ce soit en add() ou en edit(), Cake agira toujours
ainsi pour sauvegarder une HABTM.
Comme je te le disais, Cake supprime d'abord tout puis refait des
insert. Si le formulaire, les modèles, les associations et le
contrôleur sont bien formés, ça marche !

Enfin, d'après mes connaissances en SQL et SGBD et d'après quelques
éléments glanés auprès d'admin DBA, ajouter des champs dans une table
de liaison N:M ne devrait pas se faire...

On 18 juil, 15:53, "ayoub hidri" <[EMAIL PROTECTED]> wrote:
> je viens de modifier mon action admin_edit()
>
> je me suis debarassé de l'index 'id' dans $this->data dans le cas d'un ajout
>
> voilà mon $this->data
>
> Array
> (
>     [Annonce] => Array
>         (
>             [category_id] => 1
>             [title] => Vente Studio
>             [description] => jhsvd,b,sdvsdqsd
>             [date_begin] =>
>             [date_end] =>
>             [published] => 0
>             [user_id] => 1
>         )
>
>     [Caractere] => Array
>         (
>             [0] => Array
>                 (
>                     [id] => 2
>                     [values] => aze
>                 )
>
>             [1] => Array
>                 (
>                     [id] => 8
>                     [values] => rty
>                 )
>
>             [2] => Array
>                 (
>                     [id] => 5
>                     [values] => uio
>                 )
>
>             [3] => Array
>                 (
>                     [id] => 7
>                     [values] => pqs
>                 )
>
>         )
>
> et voilà ce que j'ai en SQL quand je fais un save();
>
> 15    INSERT INTO `annonces`
> (`category_id`,`title`,`description`,`date_begin`,`date_end`,`published`,`user_id`,`modified`,`created`)
> VALUES (1,'Vente Studio','jhsvd,b,sdvsdqsd','','','0',1,'2008-07-18
> 15:49:26','2008-07-18 15:49:26')        1        12
> 16    SELECT LAST_INSERT_ID() AS insertID        1    1    0
> 17    SELECT `AnnoncesCaractere`.`annonce_id` FROM `annonces_caracteres` AS
> `AnnoncesCaractere` WHERE `AnnoncesCaractere`.`annonce_id` = 88         0
> 0    0
> 18    SELECT COUNT(*) AS `count` FROM `annonces_caracteres` AS
> `AnnoncesCaractere` WHERE `AnnoncesCaractere`.`annonce_id` = 88         1
> 1    0
> 19    INSERT INTO `annonces_caracteres` (`values`,`annonce_id`) VALUES
> ('aze',88)        1        0
> 20    SELECT COUNT(*) AS `count` FROM `annonces_caracteres` AS
> `AnnoncesCaractere` WHERE `AnnoncesCaractere`.`annonce_id` = 88         1
> 1    0
> 21    UPDATE `annonces_caracteres` SET `values` = 'rty', `annonce_id` = 88
> WHERE `annonces_caracteres`.`annonce_id` = 88        1        0
> 22    SELECT COUNT(*) AS `count` FROM `annonces_caracteres` AS
> `AnnoncesCaractere` WHERE `AnnoncesCaractere`.`annonce_id` = 88         1
> 1    0
> 23    UPDATE `annonces_caracteres` SET `values` = 'uio', `annonce_id` = 88
> WHERE `annonces_caracteres`.`annonce_id` = 88        1        0
> 24    SELECT COUNT(*) AS `count` FROM `annonces_caracteres` AS
> `AnnoncesCaractere` WHERE `AnnoncesCaractere`.`annonce_id` = 88         1
> 1    0
> 25    UPDATE `annonces_caracteres` SET `values` = 'pqs', `annonce_id` = 88
> WHERE `annonces_caracteres`.`annonce_id` = 88
>
> Cake fait toujours un insert et le reste c'est des update
--~--~---------~--~----~------------~-------~--~----~

Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier  : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---

Répondre à