1. insert() を使用する(複数データの一括保存)
DB::table() を使って配列データを一括で保存できます。
例: DB::table('users')->insert($data);
phpuse Illuminate\Support\Facades\DB;DB::table('テーブル名')->DBメソッド
$data = [
['name' => 'Taro', 'email' => 'taro@example.com', 'created_at' => now(), 'updated_at' => now()],
['name' => 'Jiro', 'email' => 'jiro@example.com', 'created_at' => now(), 'updated_at' => now()],
];
DB::table('users')->insert($data); //
📌 ポイント
$dataは 多次元配列(複数のレコード)で渡す必要があります。created_atやupdated_atも手動で追加する必要があります(timestampsを使う場合)。
2. Eloquent の create() を使用する
Eloquentモデルを使うと、より簡潔にデータを保存できます。
この方法を使うには、モデルファイルでデフォルトで記述された protected $fillable[] を設定
しておく必要があります。
手順
- モデルに
$fillableを追加 (DBのカラム名を指定)
phpclass User extends Model
{
protected $fillable = ['name', 'email'];
}
- 配列データを
create()で保存 (DBカラム名と連想配列のインデックス名を共通にする)
php
//Controller.phpでもModelsでテーブル名をuseすればテーブルに保存できる。use App\Models\User;
$data = [
'name' => 'Hanako',
'email' => 'hanako@example.com'
];
//nameとemailは設定してあるので、create()の引数で渡せばOK
User::create($data);
📌 ポイント
create()を使うには、$fillableに許可するカラムを指定する必要があります。timestampsが自動でセットされるのでcreated_atやupdated_at
を指定する必要はありません。
3. insert() と create() の違い
| 方法 | メリット | デメリット |
|---|---|---|
DB::table()->insert() | 複数データを一括保存できて高速 | timestamps の自動設定がない |
Eloquent::create() | timestamps が自動設定され、Eloquentの機能が使える | 1件ずつの保存なので insert() より遅い |
4. 複数のレコードを create() で保存
もし $data に複数の配列データがある場合は、foreach を使って create() することもできます。
php$data = [
['name' => 'Taro', 'email' => 'taro@example.com'],
['name' => 'Jiro', 'email' => 'jiro@example.com'],
];
foreach ($data as $user) {
User::create($user);
}
5. insertOrIgnore() や upsert() を使う
データが重複してもエラーにしない
phpDB::table('users')->insertOrIgnore($data);
既存データを更新する
phpDB::table('users')->upsert($data, ['email'], ['name']);
['email']→ 更新のためのユニークキー['name']→ 更新されるカラム
どの方法を使うべきか?
✅ 大量データの一括保存 → DB::table()->insert()
✅ モデルを使いたい(timestampsが必要) → Eloquent::create()
✅ 重複を防ぎたい → insertOrIgnore() や upsert()

