やりたいこと
10万行、40MBくらいのcsvデータをシーディングで読み込みをしています。
困っていること
読み込みにとても時間がかかってしまいます。
初期データなのでシーディングで管理できた方がいいと思ったのですが、そもそも大容量のデータをシーディングで管理しようというのが間違いでしょうか?
時間は待てるとしてもphp artisan db:seed --class=OrderProductsTableSeeder
した後、進捗なども表示されなので動いてるのか固まっているかもわからないので困っています。
大容量のcsvデータをシーディングする良い方法はありませんか?
特に良い方法がなければcsvファイルを小分けにしてシーディングするしかないとは思っています。
よろしくお願いします。
コード
PHP
1 2use Illuminate\Database\Seeder; 3use Carbon\Carbon; 4 5class OrderProductsTableSeeder extends Seeder 6{ 7 /** 8 * Run the database seeds. 9 * 10 * @return void 11 */ 12 public function run() 13 { 14 $file = new SplFileObject('database/csv/data.csv'); 15 $file->setFlags( 16 \SplFileObject::READ_CSV | 17 \SplFileObject::READ_AHEAD | 18 \SplFileObject::SKIP_EMPTY | 19 \SplFileObject::DROP_NEW_LINE 20 ); 21 22 $is_first = true; 23 $now = Carbon::now(); 24 25 foreach ($file as $line) { 26 27 if ($is_first === true) { 28 $is_first = false; 29 continue; 30 } 31 32 $id = $line[0]; 33 $orer_id = $line[1]; 34 $product_id = $line[2]; 35 $quantity = $line[3]; 36 37 $list = [ 38 'id' => $id, 39 'order_id' => $order_id, 40 'product_id' => $product_id, 41 'quantity' => $quantity, 42 'created_at' => $now, 43 'updated_at' => $now 44 ]; 45 46 DB::table("order_products")->insert($list); 47 } 48 } 49}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/12 09:09