📅  最后修改于: 2023-12-03 14:43:45.075000             🧑  作者: Mango
Laravel 中的 Eloquent ORM 提供了非常方便的方式操作数据库。其中包括批量插入数据。本文将介绍如何使用 Eloquent 进行批量插入。
批量插入指的是一次性插入多条数据到数据库。相比于循环插入,批量插入可以大大提高插入效率。
首先,我们需要准备好要插入的数据。假设我们有一个 User
模型,它有 name
和 email
两个属性:
$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
模型为例,我们可以添加以下代码来允许 name
和 email
被批量赋值:
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()
方法。