Visão geral
Neste guia, você aprenderá a inserir documentos nas coleções do MongoDB a partir do seu aplicação Laravel usando o Laravel MongoDB.
Ao inserir os documentos, certifique-se de que os dados não violem nenhum índice exclusivo da coleta. Ao inserir o primeiro documento de uma collection ou criar uma nova collection, o MongoDB cria automaticamente um índice único no campo _id .
Para obter mais informações sobre como criar índices nas coleções do MongoDB usando o construtor de esquemas Laravel, consulte a seção Gerenciar índices da documentação do Construtor de esquemas.
Para saber mais sobre os modelos Eloquent na integração com o Laravel, consulte a seção Modele seus dados .
Modelo de amostra
As operações deste guia referenciam a seguinte classe de modelo do 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']; }
Dica
O atributo $fillable permite utilizar a atribuição em massa Laravel para inserir operações. Para saber mais sobre atribuição em massa, consulte Personalizar Atribuição de Massa na documentação da Classe de Modelo Eloquent.
O atributo $casts instrui o Laravel a converter atributos em tipos de dados comuns. Para saber mais, consulte Fundiçăo de atributos na documentação do Laravel.
Inserir um documento
Os exemplos nesta seção mostram como utilizar os métodos save() e create() Eloquent para inserir uma instância de um modelo Concert como um documento MongoDB .
Método salvar()
Quando o método save() for bem-sucedido, você poderá acessar a instância do modelo na qual chamou o método.
Se a operação falhar, a instância do modelo receberá null.
Este código de exemplo executa as seguintes ações:
Cria uma nova instância do modelo
ConcertAtribui valores de string aos campos
performerevenueAtribui uma array de strings ao campo
genreAtribui um número ao campo
ticketsSoldAtribui uma data ao campo
performanceDateusando o pacoteCarbonInsere o documento chamando o método
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();
Você pode recuperar o valor _id do documento inserido acessando o membro id do modelo, como mostrado no seguinte exemplo de código:
$insertedId = $concert->id;
Método create()
Se você ativar a atribuição em massa definindo os atributos $fillable ou $guarded , poderá usar o método create() do modelo Eloquent para executar a inserção em uma única chamada, conforme mostrado no exemplo a seguir:
$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'), ]);
Insira vários documentos
Este exemplo mostra como utilizar o método insert() Eloquent para inserir múltiplas instâncias de um modelo Concert como documentos MongoDB . Esse método de inserção em massa reduz o número de chamadas que seu aplicação precisa fazer para salvar os documentos.
Quando o método insert() é bem-sucedido, ele retorna o valor true. Se falhar, lança uma exceção.
O exemplo a seguir salva vários modelos em uma única chamada, passando-os como uma array para o método 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);
Observação
Este exemplo envolve as datas na classe MongoDB\BSON\UTCDateTime para convertê-la em um tipo que o MongoDB pode serializar porque o Laravel ignora a conversão de atributos em operações de inserção em massa.
Exemplos totalmente executáveis
As seções a seguir fornecem exemplos de código totalmente executáveis que demonstram como inserir documentos usando a Integração Laravel. Estes exemplos utilizam a sample_mflix.movies collection a partir do conjunto de dados de amostra do Atlas .
Dica
Você pode executar os exemplos completos em seu próprio aplicação Laravel ou a partir do my-app aplicação criado no tutorial de Introdução. Os exemplos usam a Movie.php classe de modelo criada neste tutorial para demonstrar operações na movies collection do MongoDB . Para executar a operação, você pode copiar o código de amostra para um endpoint do controlador em seu aplicação Laravel.
Para visualizar a saída esperada da operação, você pode adicionar uma rota web ao seu aplicação que chama a função do controlador e retorna o resultado para uma interface web.
Insira um documento
Selecione a partir das seguintes abas Eloquent e Query Builder para visualizar exemplos para cada sintaxe de query correspondente:
Este exemplo executa as seguintes ações:
Utiliza o modelo
MovieEloquent para representar a coleção dosample_mflixmoviesbanco de dados doInsere um documento na coleção
moviesImprime o documento recém-inserido
O exemplo chama o método create() para inserir um documento que contém os seguintes campos e valores:
titlevalor de"Marriage Story"yearvalor de2019runtimevalor de136
$movie = Movie::create([ 'title' => 'Marriage Story', 'year' => 2019, 'runtime' => 136, ]); echo $movie->toJson();
{ "title": "Marriage Story", "year": 2019, "runtime": 136, "updated_at": "...", "created_at": "...", "_id": "..." }
Este exemplo executa as seguintes ações:
Acessos a coleção
movieschamando o métodotable()a partir da faseDBInsere um documento na coleção
moviesImprime se a operação de inserção é bem-sucedida
O exemplo chama o método insert() para inserir um documento que contém os seguintes campos e valores:
titlevalor de"Marriage Story"yearvalor de2019runtimevalor de136
$success = DB::table('movies') ->insert([ 'title' => 'Marriage Story', 'year' => 2019, 'runtime' => 136, ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
Insira vários documentos
Selecione a partir das seguintes abas Eloquent e Query Builder para visualizar exemplos para cada sintaxe de query correspondente:
Este exemplo executa as seguintes ações:
Utiliza o modelo
MovieEloquent para representar a coleção dosample_mflixmoviesbanco de dados doInsere documentos na coleção
moviesImprime se a operação de inserção é bem-sucedida
O exemplo chama o método insert() para inserir documentos que representam filmes lançados em 2023.
$success = Movie::insert([ [ 'title' => 'Anatomy of a Fall', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')), ], [ 'title' => 'The Boy and the Heron', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')), ], [ 'title' => 'Passages', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')), ], ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
Este exemplo executa as seguintes ações:
Acessos a coleção
movieschamando o métodotable()a partir da faseDBInsere documentos na coleção
moviesImprime se a operação de inserção é bem-sucedida
O exemplo chama o método insert() para inserir documentos que representam filmes lançados em 2023.
$success = DB::table('movies') ->insert([ [ 'title' => 'Anatomy of a Fall', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-08-23')), ], [ 'title' => 'The Boy and the Heron', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-12-08')), ], [ 'title' => 'Passages', 'release_date' => new UTCDateTime(new DateTimeImmutable('2023-06-28')), ], ]); echo 'Insert operation success: ' . ($success ? 'yes' : 'no');
Insert operation success: yes
Informações adicionais
Para saber mais sobre a extensão da API do Cloud PHP, consulte o repositório do Github do Cloud.
Para saber como modificar dados que já estão no MongoDB, consulte o guia Atualizar documentos.