バルクインサートと一覧表示-7月11日

ブラック企業と名乗っている会社で働いている副業ぴーです。

めちゃくちゃプログラミングが未熟ですが、1日平均4時間のプログラミング学習を習慣化しようと奮闘中

現在、Laravelで自社の新規事業の営業ツールを開発中！
週末には新大久保のオフィスハウスで開発しとります♪
connpassイベント＝<a href="https://7chord.connpass.com/event/138635/">Laravelで営業ツール開発</a>

それ以外は、自宅で開発♪

開発中に役に立った記事やブログ、開発したソースコードを備忘録として、記載していこうと思います！

本日は
・バルクインサート
・DBから情報を取得しての一覧表示


#バルクインサート（csvでインポートする際）

```
 public function csvImport(Request $request)
        {
            //ロケールを設定
            setlocale(LC_ALL, 'ja_JP.UTF-8');

            //アップロードしたファイルを取得
            //'csv_file'はviewのinputタグのname属性
            $uploaded_file = $request->file('csv_file');

            //アップロードしたファイルの絶対パスを取得
            $file_path = $request->file('csv_file')->path($uploaded_file);

            //SplFileObjectを生成
            $file = new SplFileObject($file_path);

            $file->setFlags(SplFileObject::READ_CSV);

            //バルクインサート用の配列を用意
            $insert_array = [];

            $row_count = 1;

            foreach($file as $row)
            {
                //最終行の処理（最終行が空っぽの場合の対策）
                if($row === [null]) continue;

                //1行目のヘッダーは取り込まない
                if($row_count > 1)
                {
                    //エンコーディング
                    $company_name =  mb_convert_encoding($row[0], 'UTF-8', 'SJIS');
                    $address_1    =  mb_convert_encoding($row[1], 'UTF-8', 'SJIS');
                    $address_2    =  mb_convert_encoding($row[2], 'UTF-8', 'SJIS');
                    $telephone_1  =  mb_convert_encoding($row[3], 'UTF-8', 'SJIS');
                    $telephone_2  =  mb_convert_encoding($row[4], 'UTF-8', 'SJIS');
                    $telephone_3  =  mb_convert_encoding($row[5], 'UTF-8', 'SJIS');
                    $categories   =  mb_convert_encoding($row[6], 'UTF-8', 'SJIS');
                    $url          =  mb_convert_encoding($row[7], 'UTF-8', 'SJIS');


                    $csvimport_array = [
                        'company_name' => $company_name,
                        'address_1'    => $address_1,
                        'address_2'    => $address_2,
                        'telephone_1'  => $telephone_1,
                        'telephone_2'  => $telephone_2,
                        'telephone_3'  => $telephone_3,
                        'categories'   => $categories,
                        'url'          => $url
                    ];

                    array_push($insert_array,$csvimport_array);

                }
              $row_count++;
            }

            //配列の数を数える
            $array_count = count($insert_array);


            if($array_count < 500){

                //インサート
                モデル名::insert($insert_array);

            }else{
                //追加した配列が500以上なら、array_chunkで500ずつ分割する
                $array_partial = array_chunk($insert_array, 500); //配列


                //分割した数を数えて
                $array_partial_count = count($array_partial);//配列の数を取得

                //分割した数の分だけインポートを繰り返す
                for($i = 0; $i <= $array_partial_count - 1; $i++){

                    //インサート
                    モデル名::insert($array_partial[$i]);

                }
            }
            return view('path/csv_import');
        }


```

ソースコードは、世界のアオキさんのブログに記載されている方法をかなり参考にしています（というか、ほぼ。。）
参照URL：https://coinbaby8.com/php-csv-import-bulk-insert-laravel.html



#一覧情報表示
cssレイアウトは、bootstrapを使用して表示
開発スピードが大事なので、デザインは後々にしようと思ってます。
（下記のソースコードの変数名などは実際のものと変更してます）

```
            <div class="container-fluid">
                <table class="table table-bordered">
                    <thead>
                        <tr>
                            <th class="col-md-auto">No</th>
                            <th class="col-md-auto">企業名</th>
                            <th class="col-md-auto">都道府県</th>
                            <th class="col-md-auto">住所</th>
                            <th class="col-md-auto">電話番号</th>
                            <th class="col-md-auto">カテゴリ</th>
                        </tr>
                    </thead>
                    <tbody>
 
                    @foreach ($company as $company)
                        <tr>
                            <td>{{ $company->company_name }}</td>
                            <td>{{ $company->address_1 }}</td>
                            <td>{{ $company->address_2 }}</td>
                            <td>{{ $company->telephone_1.'-'.$company->telephone_2.'-'.$company->telephone_3}}</td>
                            <td>{{ $company->categories }}</td>
                        </tr>
                    @endforeach
                    </tbody>
                </table>
                {{$company->links()}}
            </div>

```
とりあえずの一覧表示が出来た。
書き方がメチャクチャダサいですが、仕方ないって事にしとこう。。。
早く完成させて、売り上げを立てないとあかんので

ここから、営業ツールの開発をしていきます！