personne ?
Bonjour,
Voila je rencontre un petit problème avec mon code.
Ce que je fais
Ma route :
Mon controller
J'ai aussi essayé ça pour le controller (mais le résultat est le même) :
Mes models :
Ma vue :
Ce que je veux
Je souhaite enregistrer plusieurs lignes d'un coup dans une table de ma bdd
Ce que j'obtiens
Seule une ligne est insérée dans ma table (alors que j'en ai remplie 2 ou 3 dans mon formulaire), et le user_id est à "0" dans la table.
Si je remplace insert($data) par create($data) dans mon controller le user_id est cette fois-ci bien renseigné dans ma table mais ça ne m'enregistre toujours que la première des lignes saisies.
8 réponses
Deja tu passe tout le $user alors qu'il faudrait ne passer que $user->id:
'user_id' => $user->id
Ensuite un dd($request->all()) serait judicieux pour savoir si tu recupere bien plusieurs enregistrements.
C'est un classique il faut nommer le name des inputs / select de ton form avec la notation tableau: avec [] à la fin.
Bonjour force-rouge et merci pour ta réponse,
Pour le 'user_id' => $user->id c'est bon, le problème est réglé, je récupère bien mon user_id maintenant.
Quand je fais un dd($request->all()), je n'ai effectivement qu'une seule entrée... Pourtant j'ai bien nommé les "name" des input/select avec [] à la fin. Voici la partie concernée de mon form :
Bon j'ai testé avec ton code html et chez moi ça marche !
Bien sûr j'ai rajouté une boucle for car dans ton code il n'y a qu'une ligne et voici le dd de request::all() avec des tests bidons:
En fait, à la place de la boucle for que tu utilises, j'ai un script qui fonctionne pour me rajouter des lignes dans le form mais qui apparemment ne sauvegarde pas les lignes rajoutées. Il me manque peut-être quelque chose dans ce code alors ?
je reviens sur ton pb un peu tard mais je voudrais de quelle manière se fait la soumission de ton formulaire:
par ajax ou une simple redirection sur la même page ? Ou peut être fais tu une validation via JS avant soumission qui échoue ?
La soumission en 'POST' devrait contenir toutes tes rows,
cependant si tu utilise jquery ou autre pour soumettre le form en ajax, il est possible que les rows créées dynamiquement ne soient pas associées au données du formulaire.
Enfin vu que tu utilise jquery tu peux connaitre le contenu de ta requête avant la soumission via un code du genre:
Tu sauras alors si toutes tes row sont bien postées.
Je viens de tester ton code JS et cela fonctionne chez moi ( le .addRow et le remove )
par compte j'ai wrappé le code dans $( document ).ready(function() { .... }) pour être sûr que ton le DOM est bien chargé
Bonjour force-rouge, merci bien de t'interesser à mon problème.
Pour répondre à ta question, la soumission du formulaire se fait par une simple redirection sur la même page pour le moment.
Je pense en effet que la soumission en 'POST' ne contient pas toutes mes rows.
Par contre je ne sais pas où mettre le code que tu as écris, je le met au début de ma vue ou avant le début du addRow ou après ? J'ai tout essayé et ça ne change rien j'ai toujours 1 seule ligne qui s'enregistre.
Que veut dire "j'ai wrappé le code" ?