Bancos de dados e coleções
Nesta página
Visão geral
Neste guia, você pode aprender como usar o Laravel MongoDB para acessar e gerenciar bancos de dados e coleções MongoDB.
O MongoDB organiza dados em uma estrutura hierárquica. Um MongoDB contém um ou mais bancos de dados, e cada banco de dados de dados contém uma ou mais collections. Em cada coleta, o MongoDB armazena dados como documentos que contêm pares de campo e valor. Na integração com o Laravel, você pode acessar documentos por meio de modelos do Eloquent.
Para saber mais sobre o formato de dados do documento, consulteDocumentos do no manual do servidor MongoDB.
Especifique o banco de dados em uma configuração de conexão
Você pode especificar um nome de banco de dados que uma conexão usa no arquivo config/database.php
do seu aplicativo. A propriedade connections
neste arquivo armazena todas as informações de conexão do banco de dados, como sua string de conexão, nome do banco de dados e, opcionalmente, detalhes de autenticação. Depois de especificar uma conexão com o banco de dados, você pode executar operações em nível de banco de dados e acessar collections que o banco de dados contém.
Se você definir o nome do banco de dados de dados na propriedade database
para o nome de um banco de banco de dados inexistente, o Laravel fará uma conexão válida. Quando você insere quaisquer dados em uma coleção no banco de banco de dados, o servidor os cria automaticamente.
O exemplo seguinte mostra como definir uma conexão de banco de banco de dados padrão e criar uma conexão de banco de dados de dados para o banco de banco de dados animals
no arquivo config/database.php
definindo as propriedades dsn
e database
:
'default' => 'mongodb', 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], ... ]
Quando você define uma conexão de banco de dados de dados padrão, a integração do Laravel usa essa conexão para operações, mas você pode especificar várias conexões de banco de dados de dados em seu arquivo config/database.php
.
O exemplo seguinte mostra como especificar múltiplas conexões de banco de dados de dados (mongodb
e mongodb_alt
) para acessar os bancos de dados animals
e plants
:
'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], 'mongodb_alt' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'plants', ] ], ...
Observação
O driver MongoDB PHP reutiliza a mesma conexão quando você cria dois clientes com a mesma string de conexão. Não há sobrecarga no uso de duas conexões para dois bancos de dados distintos, portanto, é desnecessário otimizar suas conexões.
Se o seu aplicativo contiver múltiplas conexões de banco de dados e você quiser armazenar seu modelo em um banco de dados diferente do padrão, substitua a propriedade $connection
na sua classe Model
.
O exemplo seguinte mostra como substituir a propriedade $connection
na classe de modelo Flower
para usar a conexão mongodb_alt
. Isso direciona a integração do Laravel para armazenar o modelo na flowers
coleção do plants
banco de banco de dados , em vez de no banco de banco de dados padrão:
class Flower extends Model { protected $connection = 'mongodb_alt'; }
Acessar uma coleção
Quando você cria uma classe de modelo que se estende MongoDB\Laravel\Eloquent\Model
, a integração do Laravel armazena os dados do modelo em uma coleção com um nome formatado como a forma plural do caso da cobra do nome da classe do modelo.
Por exemplo, se você criar uma classe de modelo chamada Flower
, o Laravel aplicará o modelo à collection flowers
no banco de dados.
Dica
Para saber como especificar um nome de coleção diferente em sua classe de modelo, consulte a seção Alterar o nome da coleção de modelo do guia Classe de modelo Eloquent.
Em geral, recomendamos que você use o ORM do Eloquent para acessar uma collection para legibilidade e manutenção do código. O exemplo a seguir especifica uma operação de localização usando a classe Flower
, para que o Laravel recupere os resultados da coleção flowers
:
Flower::where('name', 'Water Lily')->get()
Observação
A partir do Laravel Integration v4.8, o método DB::collection()
é preterido. Conforme mostrado no exemplo a seguir, você pode usar o método DB::table()
para acessar uma coleção MongoDB .
Se não for possível realizar sua operação usando um modelo Eloquent, você pode acessar o construtor de query chamando o método table()
na interface DB
. O exemplo a seguir mostra a mesma query do exemplo anterior, mas a query é construída usando o método DB::table()
:
DB::connection('mongodb') ->table('flowers') ->where('name', 'Water Lily') ->get()
Listar coleções
Você pode realizar uma das seguintes ações para visualizar informações sobre as collections em um banco de dados de dados:
Executar um comando de shell
Você pode listar as coleções em um banco de dados de dados executando o seguinte comando em sua shell a partir do diretório raiz do seu projeto:
php artisan db:show
Esse comando gera informações sobre o banco de banco de dados configurado e lista suas collections no cabeçalho Table
. Para mais informações sobre o db:show
comando, consulte Laravel: Novos comandos de banco de dados no blog oficial do Laravel.
Chamar banco de dados ou métodos de esquema
Você pode listar as coleções em um banco de dados de dados ligando para os seguintes métodos em seu aplicação:
DB::listCollections()
: lista informações sobre cada collection usando o construtor de querySchema::getTablesListing()
: lista o nome de cada coleção usando o construtor de esquemaSchema::getTables()
: lista o nome e o tamanho de cada coleção usando o construtor de esquema
Observação
O MongoDB é um banco de dados de dados sem esquema , portanto, os métodos construtores de esquema anteriores consultam os dados do banco de dados de dados em vez do esquema.
Exemplo
O exemplo a seguir acessa uma conexão de banco de dados de dados e, em seguida, chama o método listCollections()
de construtor de query para recuperar informações sobre as collections no banco de banco de dados:
$collections = DB::connection('mongodb')->getMongoDB()->listCollections();
Listar campos de coleção
Você pode realizar uma das seguintes ações para ver informações sobre cada campo em uma collection:
Executar um comando de shell
Você pode ver uma lista de campos em uma coleção executando o seguinte comando em sua shell a partir do diretório raiz do seu projeto:
php artisan db:table <collection name>
Este comando gera cada campo de coleção e seu tipo de dados correspondente sob o cabeçalho Column
. Para obter mais informações sobre o db:table
comando , consulte Laravel: Novos comandos de banco de dados no blog oficial do Laravel.
Métodos de esquema de chamada
Você pode listar os campos em uma coleção chamando o método de construtor de esquema do Schema::getColumns()
em seu aplicação.
Você também pode usar os métodos a seguir para retornar mais informações sobre os campos de coleção:
Schema::hasColumn(string $<collection>, string $<field name>)
: verifica se o campo especificado existe em pelo menos um documentoSchema::hasColumns(string $<collection>, string[] $<field names>)
: verifica se cada campo especificado existe em pelo menos um documento
Observação
O MongoDB é um banco de dados de dados sem esquema , portanto, os métodos anteriores executam query dos dados da collection em vez do esquema do banco de dados de dados. Se a coleção especificada não existir ou estiver vazia, esses métodos retornarão um valor de false
.
Exemplo
O exemplo seguinte passa um nome de coleção para o método Schema::getColumns()
para recuperar cada campo na coleção flowers
:
$fields = Schema::getColumns('flowers');
Criar e descartar coleções
Para saber como criar e eliminar collections, consulte a seção Executar migrações do Laravel no guia Construtor de esquemas.