2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

現在、Laravelで自社の新規事業の営業ツールを開発中!
週末には新大久保のオフィスハウスで開発しとります♪
connpassイベント=Laravelで営業ツール開発

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

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

本日は
・バルクインサート
・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>

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

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?