前提・実現したいこと
Vue.jsでaxios.postされたオブジェクトを配列に変換し、
データベースに一行ずつ登録したいです。
vue
1<template> 2 <form> 3 <div> 4 <div v-for="n in 10"> 5 <label class="label">データ{{n}}</label> 6 <input class="input" type="text" v-model="form.data[n - 1]"> 7 </div> 8 <button type="button" @click="submit">登録する</button> 9 </div> 10</form> 11</template> 12<script> 13 export default { 14 data() { 15 return { 16 form:{ 17 data: [], 18 }, 19 } 20 }, 21 methods:{ 22 submit(){ 23 var dataform = new FormData(); 24 dataform.append('data', this.form.data); 25 26 var url = '/project/add' 27 axios.post(url, dataform) 28 .then(function(response){ 29 }) 30 .catch(function(error){ 31 }); 32 } 33 } 34 } 35</script>
PHP
1public function new(Request $request){ 2 $datasets = (array)$request->data; 3 4 foreach ($datasets as $index => $data) { 5 $data.'_'.$index = new Data; 6 $data.'_'.$index->label = $data; 7 $data.'_'.$index->save(); 8 } 9 }
発生している問題・エラーメッセージ
受け取った配列がデータベースに一つのデータとしてそのまま登録されてしまいます。
mysql> select * from data; +----+----------------------+---------------------+---------------------+ | id | label | created_at | updated_at | +----+----------------------+---------------------+---------------------+ | 1 | A,B,C | 2019-10-25 10:40:02 | 2019-10-25 10:40:02 | +----+----------------------+---------------------+---------------------+
本当はこうしたいです
mysql> select * from data; +----+----------------------+---------------------+---------------------+ | id | label | created_at | updated_at | +----+----------------------+---------------------+---------------------+ | 1 | A | 2019-10-25 10:40:02 | 2019-10-25 10:40:02 | | 2 | B | 2019-10-25 10:40:02 | 2019-10-25 10:40:02 | | 3 | C | 2019-10-25 10:40:02 | 2019-10-25 10:40:02 | +----+----------------------+---------------------+---------------------+
試したこと
配列をforeachで配列をひとつずつ取り出して、
indexキーで異なる変数名を作っているはずなのですが、うまくいきません。
どなたか解決のヒントをいただけないでしょうか?
何卒よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
Laravel Framework 6.3.0
vue@2.6.10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/25 12:50 編集
2019/10/25 15:19
2019/10/26 09:34