插入文档
Overview
在本指南中,您可以学习;了解如何使用 Laravel MongoDB从 Laravel应用程序将文档插入MongoDB集合。
插入文档时,请确保数据不违反集合上的任何唯一索引。插入集合的第一个文档或创建新集合时, MongoDB会自动在 _id
字段上创建唯一索引。
有关使用 Laravel模式构建器在MongoDB集合上创建索引的更多信息,请参阅模式构建器文档的 管理索引部分。
要学习;了解有关 Laravel 集成中的 Eloquent 模型的更多信息,请参阅 Eloquent模型部分。
示例模型
本指南中的操作引用了以下 Eloquent 模型类:
namespace App\Models; use MongoDB\Laravel\Eloquent\Model; class Concert extends Model { protected $connection = 'mongodb'; protected $fillable = ['performer', 'venue', 'genres', 'ticketsSold', 'performanceDate']; protected $casts = ['performanceDate' => 'datetime']; }
提示
$fillable
属性允许您对插入操作使用 Laravel 批量分配。 要学习;了解有关批量分配的更多信息,请参阅 Eloquent 模型类文档中的自定义批量分配。
$casts
属性指示 Laravel 将属性转换为常见数据类型。要学习;了解更多信息,请参阅 Laravel 文档中的 属性转换 。
插入一个文档
本节中的示例展示了如何使用 save()
和 create()
Eloquent 方法将 Concert
模型的实例作为MongoDB文档插入。
save() 方法
当save()
方法成功时,您可以访问权限调用该方法的模型实例。
如果操作失败,则会为模型实例分配null
。
此示例代码执行以下操作:
创建
Concert
模型的新实例为
performer
和venue
字段分配string值将字符串数组赋值给
genre
字段为
ticketsSold
字段分配一个数字使用
Carbon
包为performanceDate
字段分配日期通过调用
save()
方法插入文档
$concert = new Concert(); $concert->performer = 'Mitsuko Uchida'; $concert->venue = 'Carnegie Hall'; $concert->genres = ['classical']; $concert->ticketsSold = 2121; $concert->performanceDate = Carbon::create(2024, 4, 1, 20, 0, 0, 'EST'); $concert->save();
您可以通过访问模型的id
成员来检索插入文档的_id
值,如以下代码示例所示:
$insertedId = $concert->id;
create() 方法
如果通过定义$fillable
或$guarded
属性来启用批量分配,则可以使用 Eloquent 模型的create()
方法在单次调用中执行插入,如以下示例所示:
$insertResult = Concert::create([ 'performer' => 'The Rolling Stones', 'venue' => 'Soldier Field', 'genres' => [ 'rock', 'pop', 'blues' ], 'ticketsSold' => 59527, 'performanceDate' => Carbon::create(2024, 6, 30, 20, 0, 0, 'CDT'), ]);
要了解有关CarbonPHPAPI 扩展的更多信息,请参阅 CarbonGithub 存储库。
插入多个文档
此示例演示如何使用insert()
Eloquent 方法将Concert
模型的多个实例作为MongoDB文档插入。 这种批量插入方法减少了应用程序为保存文档所需进行的调用次数。
当 insert()
方法成功时,将返回值 1
。如果失败,则会引发异常。
以下示例通过将多个模型作为大量传递给 insert()
方法,在一次调用中保存多个模型:
$data = [ [ 'performer' => 'Brad Mehldau', 'venue' => 'Philharmonie de Paris', 'genres' => [ 'jazz', 'post-bop' ], 'ticketsSold' => 5745, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], [ 'performer' => 'Billy Joel', 'venue' => 'Madison Square Garden', 'genres' => [ 'rock', 'soft rock', 'pop rock' ], 'ticketsSold' => 12852, 'performanceDate' => new UTCDateTime(Carbon::create(2025, 2, 12, 20, 0, 0, 'CET')), ], ]; Concert::insert($data);
注意
此示例将日期包装在 MongoDB\BSON\UTCDateTime 类以将其转换为 MongoDB 可以序列化的类型,因为 Laravel 在批量插入操作上会跳过属性转换。
更多信息
要查看演示如何使用 Laravel 集成插入文档的可运行代码示例,请参阅以下用法示例: