Construtor de esquemas
Nesta página
Visão geral
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.
Realizar migrações do Laravel
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.
Criar uma classe de migração
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
porMongoDB\Laravel\Schema\Blueprint
se ela for referenciada em sua migraçãoUse 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 entradamongodb
válida no arquivoconfig/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çãodown()
, que descarta a coleção e todos os índices quando você reverte a migração
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'); } };
Executar ou Reverter uma Migração
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.
Verifique se existe uma coleção
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'); }
Gerenciar índices
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.
Crie um índice
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
elaunch_date
, especificando uma ordem de classificação decrescente emlaunch_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']); });
Especificar opções de índice
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.
Criar índices esparsos, TTL e únicos
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.
Criar um índice geoespacial
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.
Descarte um índice
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'); });