Bonjour,

j'ai un formulaire d'inscription pour un évènement.
Il permet d'enregistrer un invité principal et un accompagnateur.
L'invité principal doit mentionner des informations complémentaires et sera le seul à pouvoir venir modifier les informations.

Au final après validation du formulaire j'obtiens qqc comme ça :
debug($this->request->data);

array(
    'Client' => array(
        (int) 0 => array(
            'civilite' => 'M',
        'name' => 'Nom',
        'prenom' => 'Prénom',
            'acompagnateur' => 0
        ),
        (int) 1 => array(
            'civilite' => 'M',
        'name' => 'Nom',
        'prenom' => 'Prénom',
            'acompagnateur' => 0
        )
    ),
    'Activite' => array(
        (int) 0 => array(
        ),
        (int) 1 => array(
        ),
        (int) 2 => array(
        )
    )
)

Les problèmes :

Alors pour être précis le saveAssocieted fonctionne bien en l'état mais je voudrais enregistrer dans accompagnateur de l'invité principal, l'id de l'enregistrement de l'accompagnateur. Et dans accompagnateur de l'accompagnateur, l'id de l'invité principal.
Y'a bien getInsertID() et getID() pour récupérer le dernier id.
Mais puis je les insérer avec un afterSave dans le model par exemple ? car je n'y arrive pas.
Question annexe : le afterSave s’exécute après chaque enregistrement ou à la fin du saveAll ?

Merci

1 réponse


gato
Auteur

Bonjour,

Alors je me suis débrouillé autrement, mais je viens montrer une piste, au cas où quelqu'un aurait la même problématique.
J'ai l'impression en lisant les différents exemples trouvés sur les forum que mon tableau est incorrect.
En effet, il me semble avoir compris que le model qui est utilisé pour exécuter le saveAll ou saveAssociated ne doit pas avoir de multiples entrées dans le tableau $this->request->data.
En gros au lieu de mon tableau ci dessus j'aurais du avoir :

array(
    'Client' => array(
      'civilite' => 'M',
        'name' => 'Nom',
        'prenom' => 'Prénom',
        'acompagnateur' => 0
    ),
    'Activite' => array(
        (int) 0 => array(
        ),
        (int) 1 => array(
        ),
        (int) 2 => array(
        )
    )
)

Du coup j'ai créé une table accompagnateur et cela fonctionne.

Par contre dans un soucis d'essayer de coder avec les bonnes pratiques, pour réussir un update après un save, saveAll ou autre il faut un id.
Mais lorsqu'on fait de multiple écriture dans plusieurs table, faut il indiquer l'id de chaque écriture dans la vue ?

Comme ceci :

echo $this->Form->input('Client.id', array('type' => 'hidden', 'value' => $this->request->data'Accompagnateur']'id'])); 
foreach ($this->request->data'Activite'] as $k => $v) {
  echo $this->Form->input('Activite.'.$k.'.id', array('type' => 'hidden', 'value' => $v'id'])); 
}

Merci