Menu Docs
Página inicial do Docs
/ / /
Laravel MongoDB
/

Construtor de esquemas

Nesta página

  • Visão geral
  • Realizar migrações do Laravel
  • Criar uma classe de migração
  • Executar ou Reverter uma Migração
  • Verifique se existe uma coleção
  • Gerenciar índices
  • Crie um índice
  • Especificar opções de índice
  • Criar índices esparsos, TTL e únicos
  • Criar um índice geoespacial
  • Descarte um índice

O Laravel fornece uma máscara para acessar a classe de construtor de esquema Schema, que permite criar e modificar tabelas. As facetas são interfaces estáticas para classes que tornam a sintaxe mais concisa e melhoram a testabilidade.

O Laravel MongoDB suporta um subconjunto dos métodos de gerenciamento de índice e coleção na façada do Laravel Schema .

Para saber mais sobre facetas, consulte Fachadas na documentação do Laravel.

As seções a seguir descrevem os recursos de construtor de esquema Laravel disponíveis no Laravel MongoDB e mostram exemplos de como usá-los:

Observação

O Laravel MongoDB oferece suporte ao gerenciamento de índices e collections, mas exclui o suporte para JSON schemas do MongoDB para validação de dados. Para saber mais sobre a validação de JSON schema , consulte Validação de esquema no manual do servidor.

As migrações do Schema permitem criar, modificar e excluir programaticamente seu esquema de banco de dados executando métodos incluídos na face . As seções a seguir explicam como criar uma classe de migração quando você usa um banco de MongoDB database e como executá-las.

A modificação de bancos de dados e collections a partir de uma migração fornece uma abordagem controlada que garante consistência, controle de versão e reversibilidade em seu aplicativo.

Você pode criar classes de migração manualmente ou gerá-las usando o comando php artisan make:migration . Se você gerá-los, deverá fazer as seguintes alterações para executar as alterações de esquema em seu banco de MongoDB database:

  • Substitua a importação Illuminate\Database\Schema\Blueprint por MongoDB\Laravel\Schema\Blueprint se ela for referenciada em sua migração

  • Use apenas comandos e sintaxe suportados pelo Laravel MongoDB

Dica

Se sua conexão de banco de dados padrão não estiver definida como banco de MongoDB database, atualize a seguinte configuração para garantir que a migração especifique o banco de dados correto:

  • Certifique-se de que o item da matriz connections contém uma entrada mongodb válida no arquivo config/database.php

  • Especifique "mongodb" no campo $connection da sua classe de migração

O exemplo de classe de migração a seguir contém os seguintes métodos:

  • up(), que cria uma collection e um índice quando você executa a migração

  • down(), que descarta a coleção e todos os índices quando você reverte a migração

<?php
declare(strict_types=1);
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
use MongoDB\Laravel\Schema\Blueprint;
return new class extends Migration
{
protected $connection = 'mongodb';
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('astronauts', function (Blueprint $collection) {
$collection->index('name');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::drop('astronauts');
}
};

Para executar a migração do banco de dados de um arquivo de classe, execute o seguinte comando após substituir o espaço reservado:

php artisan migrate --path=<path to your migration class file>

Este comando executa a função up() no arquivo de classe para criar a coleção e índice no banco de dados especificado no arquivo config/database.php .

Para reverter a migração, execute o seguinte comando depois de substituir o espaço reservado:

php artisan migrate:rollback --path=<path to your migration class file>

Este comando executa a função down() no arquivo de classe para soltar a coleção e índices relacionados.

Para saber mais sobre migrações do Laravel, consulte Banco de Dados: Migrações na documentação do Laravel.

Para verificar se uma coleção existe, chame o método hasCollection() na face Schema em seu arquivo de migração. Você pode usar isso para executar a lógica de migração condicionalmente.

O seguinte exemplo de migração cria uma collection telescopes se uma collection denominada stars existir:

$hasCollection = Schema::hasCollection('stars');
if ($hasCollection) {
Schema::create('telescopes');
}

Os índices do MongoDB são estruturas de dados que melhoram a eficiência da query reduzindo o número de documentos necessários para recuperar os resultados da query. Alguns índices, como índices geoespaciais, estendem como você pode consultar os dados.

Para melhorar o desempenho da consulta usando um índice, verifique se o índice cobre a consulta. Para saber mais sobre índices e otimização de queries, consulte as seguintes entradas de manual do servidor MongoDB:

As seções a seguir mostram como você pode usar o construtor de esquemas para criar e eliminar vários tipos de índices em uma coleção.

Para criar índices, chame o método create() na face Schema em seu arquivo de migração. Passe o nome da collection e um método de chamada de resposta de chamada com um parâmetro MongoDB\Laravel\Schema\Blueprint . Especifique os detalhes de criação do índice na instância do Blueprint .

O exemplo de migração a seguir cria índices nos seguintes campos de coleção:

  • Índice de campo único ativado mission_type

  • Índice composto em launch_location e launch_date, especificando uma ordem de classificação decrescente em launch_date

  • Índice único no campo mission_id , especificando o nome do índice "unique_mission_id_idx"

Clique no botão VIEW OUTPUT para ver os índices criados pela execução da migração, incluindo o índice padrão no campo _id :

Schema::create('flights', function (Blueprint $collection) {
$collection->index('mission_type');
$collection->index(['launch_location' => 1, 'launch_date' => -1]);
$collection->unique('mission_id', options: ['name' => 'unique_mission_id_idx']);
});

As opções de índice do MongoDB determinam como os índices são usados e armazenados. Você pode especificar opções de índice ao chamar um método de criação de índice, como index(), em uma instância Blueprint .

O código de migração a seguir mostra como adicionar um agrupamento a um índice como uma opção de índice. Clique no botão VIEW OUTPUT para ver os índices criados pela execução da migração, incluindo o índice padrão no campo _id :

Schema::create('passengers', function (Blueprint $collection) {
$collection->index(
'last_name',
name: 'passengers_collation_idx',
options: [
'collation' => [ 'locale' => 'de@collation=phonebook', 'numericOrdering' => true ],
],
);
});

Para saber mais sobre as opções de índice, consulte Opções para todos os tipos de índice no manual do servidor MongoDB.

Você pode usar os métodos assistente do Laravel MongoDB para criar os seguintes tipos de índices:

  • Índices esparsos, que permitem entradas de índice somente para documentos que contêm o campo especificado

  • Índices de vida útil (TTL), que expiram após um período de tempo definido

  • Índices únicos, que impedem a inserção de documentos que contêm valores duplicados para o campo indexado

Para criar esses tipos de índice, chame o método create() na face Schema em seu arquivo de migração. Passe create() o nome da collection e um método de retorno de chamada de resposta com um parâmetro MongoDB\Laravel\Schema\Blueprint . Chame o método auxiliar apropriado na instância Blueprint e passe os detalhes de criação do índice.

O código de migração a seguir mostra como criar um índice esparso e um índice TTL usando os auxiliares de índice. Clique no botão VIEW OUTPUT para ver os índices criados pela execução da migração, incluindo o índice padrão no campo _id :

Schema::create('planets', function (Blueprint $collection) {
$collection->sparse('rings');
$collection->expire('last_visible_dt', 86400);
});

Você pode especificar índices esparsos, TTL e únicos em um único campo ou índice composto especificando-os nas opções de índice.

O seguinte código de migração mostra como criar todos os três tipos de índices em um único campo. Clique no botão VIEW OUTPUT para ver os índices criados pela execução da migração, incluindo o índice padrão no campo _id :

Schema::create('planet_systems', function (Blueprint $collection) {
$collection->index('last_visible_dt', options: ['sparse' => true, 'expireAfterSeconds' => 3600, 'unique' => true]);
});

Para saber mais sobre esses índices, consulte Propriedades do índice no manual do servidor MongoDB.

No MongoDB, os índices geoespaciais permitem consultar dados de coordenadas geoespaciais para inclusão, interseção e proximidade.

Para criar índices geoespaciais, chame o método create() na face Schema em seu arquivo de migração. Passe create() o nome da collection e um método de chamada de resposta de chamada de resposta com um parâmetro MongoDB\Laravel\Schema\Blueprint . Especifique os detalhes de criação do índice geoespacial na instância do Blueprint .

A seguinte migração de exemplo cria um índice geoespacial 2d e 2dsphere na coleção spaceports . Clique no botão VIEW OUTPUT para ver os índices criados pela execução da migração, incluindo o índice padrão no campo _id :

Schema::create('spaceports', function (Blueprint $collection) {
$collection->geospatial('launchpad_location', '2dsphere');
$collection->geospatial('runway_location', '2d');
});

Para saber mais sobre índices geoespaciais, consulte Índices geoespaciais no manual do servidor.

Para eliminar índices de uma coleção, chame o método table() na face Schema em seu arquivo de migração. Passe o nome da tabela e um método de chamada de resposta de chamada com um parâmetro MongoDB\Laravel\Schema\Blueprint . Chame o método dropIndex() com o nome do índice na instância Blueprint .

Observação

Se você descartar uma collection, o MongoDB descartará automaticamente todos os índices associados a ela.

O exemplo de migração a seguir elimina um índice chamado unique_mission_id_idx da coleção flights :

Schema::table('flights', function (Blueprint $collection) {
$collection->dropIndex('unique_mission_id_idx');
});

Voltar

Relacionamentos

Próximo

Construtor de Query