回答編集履歴

1 frameworkの処理を追記

motuo

motuo score 2980

2017/06/27 16:27  投稿

laravelのマニュアルそのままになってしまって、恐縮ですが配列の配列をinsertに渡して呼び出すことで、テーブルにたくさんのレコードを一度にまとめて挿入できます。
[参考URL(Insertを参照)](https://readouble.com/laravel/5.4/ja/queries.html)
```PHP
DB::table('users')->insert([
   ['email' => 'taylor@example.com', 'votes' => 0],
   ['email' => 'dayle@example.com', 'votes' => 0]
]);
```  
> framework側のInsertメソッド(スイマセン。Ver 5.3ですが、たぶん変わらないはず)  
```PHP  
   /**  
    * Compile an insert statement into SQL.  
    *  
    * @param \Illuminate\Database\Query\Builder $query  
    * @param array $values  
    * @return string  
    */  
   public function compileInsert(Builder $query, array $values)  
   {  
       // Essentially we will force every insert to be treated as a batch insert which  
       // simply makes creating the SQL easier for us since we can utilize the same  
       // basic routine regardless of an amount of records given to us to insert.  
       $table = $this->wrapTable($query->from);  
 
       if (! is_array(reset($values))) {  
           $values = [$values];  
       }  
 
       $columns = $this->columnize(array_keys(reset($values)));  
 
       // We need to build a list of parameter place-holders of values that are bound  
       // to the query. Each insert should have the exact same amount of parameter  
       // bindings so we will loop through the record and parameterize them all.  
       $parameters = [];  
 
       foreach ($values as $record) {  
           $parameters[] = '('.$this->parameterize($record).')';  
       }  
 
       $parameters = implode(', ', $parameters);  
       //ここ!  
       return "insert into $table ($columns) values $parameters";  
   }  
 
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る