📜  laravel eloquent 批量插入 - PHP (1)

📅  最后修改于: 2023-12-03 14:43:45.075000             🧑  作者: Mango

Laravel Eloquent 批量插入

Laravel 中的 Eloquent ORM 提供了非常方便的方式操作数据库。其中包括批量插入数据。本文将介绍如何使用 Eloquent 进行批量插入。

什么是批量插入?

批量插入指的是一次性插入多条数据到数据库。相比于循环插入,批量插入可以大大提高插入效率。

如何使用 Eloquent 进行批量插入?

首先,我们需要准备好要插入的数据。假设我们有一个 User 模型,它有 nameemail 两个属性:

$users = [
    ['name' => 'Alice', 'email' => 'alice@example.com'],
    ['name' => 'Bob', 'email' => 'bob@example.com'],
    ['name' => 'Charlie', 'email' => 'charlie@example.com'],
];

接下来,我们可以使用 Eloquent 的 insert() 方法进行批量插入:

DB::table('users')->insert($users);

以上代码会将 $users 数组中的数据一次性插入到 users 表中。注意,我们使用的是 DB facade,而不是 User 模型本身,这是因为 insert() 方法是属于 QueryBuilder 类的。

批量插入时的注意事项
字段白名单

在进行批量插入时,一定要注意字段白名单(mass assignment)。默认情况下,Eloquent 会保护模型的关键字段不被批量赋值。因此,如果要插入的数据中包含了模型的关键字段,那么就需要在模型中申明这些字段是可以被批量赋值的。

User 模型为例,我们可以添加以下代码来允许 nameemail 被批量赋值:

class User extends Model
{
    protected $fillable = ['name', 'email'];
}
主键冲突

当批量插入的数据中包含了已经存在的主键时,会抛出 Illuminate\Database\QueryException 异常。为了避免这种情况,可以设置 ignore()replace()

DB::table('users')->insertOrIgnore($users);

在插入过程中,如果数据中已经存在某个主键,将会被忽略。

DB::table('users')->insertOrReplace($users);

在插入过程中,如果数据中已经存在某个主键,将会执行替换操作。

结语

批量插入是一种非常好用的方式,可以大大提高数据库操作的效率。在使用 Eloquent 进行批量插入时,注意要处理好字段白名单和主键冲突等问题,同时可以根据具体情况选择 ignore()replace() 方法。