作っているもの
csvデータを受け取ってそれをLaravelでMysqlに格納するというアプリを作っています
扱っているデータ
csvデータなのですが、カラムに意味があるものではなく改行された先頭の数字(レコード番号)でインサートするテーブルが変わるというちょっと変わったcsvデータです
困っていること
同じレコード番号のレコードが複数ある場合それを選んで全て対象のテーブルに入れたいのですが、最後の一行しか入れられず困っています
受け取るデータ
1,送信者 2,カラス,黒,大きい 2,すずめ,茶色,小さい 3,H2018/02/01
//csvデータを多次元配列化 $csvData = $request->getContent(); $lines = explode("\n", $csvData); $array = array(); foreach ($lines as $line) { $array[] = str_getcsv($line); } //レコードID2のものが無い場合もあるのであるか確認 $bird= array_filter($array, function($record){ return $record[0] == 2; }); $bird= array_flatten($bird); $bird_tf = empty($bird); if($bird_tf != true){ //複数合った場合、一続きの配列になってしまうので分割 $bird= array_chunk($bird, 4); $bird_count = count($bird); for ($i = 0; $i < $bird_count; $i++){ $array = $bird[$i]; $bird_in = [ 'syurui' => $array[1], 'color' => $array[2], 'size' => $array[3] ]; } $bird= DB::table('bird_table')->insert($bird_in); }
このコードだと 2,すずめ,茶色,小さい というものだけ入りはじめに書かれている配列はデータベースにインサートできませんでした。
ここまでは理解できるのですが、 $bird= DB::table('bird_table')->insert($bird_in);という一文をfor文の中 ];のすぐ後ろに入れると
'syurui' cannot be nullと出てしまいました。
インサート文の手前で$array[1]をddで出力すると欲しい値が入っているのでどうしてこのエラーが出ているのかわかりません。
イメージとしては順番に作成された配列を取り出して1配列ずつインサートされると思ったのですが、どこが悪いのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。