質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

1326閲覧

複数ある配列のインサートがひとつ分しかできない

lkjgffh

総合スコア37

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2018/02/01 06:18

作っているもの
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配列ずつインサートされると思ったのですが、どこが悪いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

気がついていなかっただけで配列番号がばらばらになっていました。配列番号をあわせることで解決しました

投稿2018/02/01 06:54

lkjgffh

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問