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

Classe de modelo Eloquent

Nesta página

  • Visão geral
  • Definir uma classe de modelo Eloquent
  • Estenda o modelo autenticavel
  • Personalizar uma classe de modelo Eloquent
  • Alterar o nome da coleção de modelos
  • Alterar o campo de chave primária
  • Habilitar exclusões suaves
  • Converter tipos de dados
  • Personalizar Atribuição em Massa
  • Especifique o comportamento de remoção
  • Exemplo executável
  • Exemplo executável em massa

Este guia mostra como usar o pacote Laravel MongoDB para definir e personalizar modelos Laravel Eloquent. Você pode usar esses modelos para trabalhar com dados do MongoDB usando o mapeador relacional de objetos (ORM) do Laravel Eloquent.

As seções a seguir explicam como adicionar comportamentos ORM do Laravel Eloquent aos modelos do Laravel MongoDB:

  • Definir uma classe de modelo Eloquent demonstra como criar uma classe de modelo.

  • Extend the Authenticatable Model mostra como definir o MongoDB como o provedor do usuário de autenticação.

  • Personalizar uma classe de modelo Eloquent explica várias personalizações de classe de modelo.

  • Especificar Comportamento de Poda mostra como remover periodicamente os modelos que você não precisa mais.

Modelos Eloquent são classes que representam seus dados. Elas incluem métodos que executam operações do banco de dados, como inserções, atualizações e exclusões.

Para declarar um modelo Laravel MongoDB, crie uma classe no diretório app/Models do seu aplicativo Laravel que estenda o MongoDB\Laravel\Eloquent\Model como mostrado no seguinte exemplo de código:

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
}

Por padrão, o modelo usa o nome do banco de banco de dados MongoDB definido na configuração config/database.php do aplicativo Laravel e a forma plural de snake case do nome da classe do modelo para a coleção.

Este modelo é armazenado na coleção planets MongoDB.

Dica

Como alternativa, use o console artisan para gerar a classe de modelo e alterar a importação Illuminate\Database\Eloquent\Model para MongoDB\Laravel\Eloquent\Model. Para saber mais sobre o artisan console do , consulte Console do Mestre nos do Docs Laravel.

Para saber como especificar o nome do banco de dados de dados usado pelo seu aplicação Laravel, Configure sua conexão com o MongoDB .

Para configurar o MongoDB como o provedor de usuário do Laravel, você pode estender a classe MongoDB MongoDB\Laravel\Auth\User do Laravel. O seguinte exemplo de código mostra como estender esta classe:

<?php
namespace App\Models;
use MongoDB\Laravel\Auth\User as Authenticatable;
class User extends Authenticatable
{
}

Para saber mais sobre como personalizar um fornecedor de usuário de autenticação do Laravel, consulte Adicionar fornecedores de usuário personalizados nos do Docs Laravel.

Esta seção mostra como executar as seguintes personalizações de comportamento do modelo Eloquent:

Por padrão, o modelo usa a forma plural de snake case do seu nome de classe de modelo. Para alterar o nome da collection que o modelo utiliza para recuperar e salvar dados no MongoDB, substitua a propriedade $collection da classe de modelo.

Observação

Recomendamos usar o comportamento de nomenclatura de coleção padrão para manter as associações entre modelos e coleções diretas.

O exemplo a seguir especifica o nome da collection MongoDB customizada, celestial_body, para a classe Planet :

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
protected $collection = 'celestial_body';
}

Sem substituir a propriedade $collection , este modelo mapeia para a coleção planets . Com a propriedade substituída , a classe de exemplo armazena o modelo na coleção celestial_body .

Para personalizar o campo de chave primária do modelo que identifica exclusivamente um documento MongoDB, substitua a propriedade $primaryKey da classe de modelo.

Por padrão, o modelo usa o driver PHP MongoDB para gerar ObjectIDs exclusivos para cada documento que seu aplicação Laravel insere.

O exemplo seguinte especifica o campo name como a chave primária para a classe Planet :

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
protected $primaryKey = 'name';
}

Para saber mais sobre o comportamento da chave primária e as opções de personalização, consulte Chaves primárias do Eloquent nos do Docs Laravel.

Para saber mais sobre o _id campo , ObjectIDs e a MongoDB estrutura do documento ,consulte Documentos nos do MongoDB servidor Docs.

O Eloquent inclui um recurso de exclusão suave que altera o comportamento do método delete() em um modelo. Quando a exclusão reversível está ativada em um modelo, o método delete() marca um documento como excluído em vez de removê-lo do banco de dados. Ele define um carimbo de data/hora no campo deleted_at para excluí-lo automaticamente das operações de recuperação.

Para habilitar exclusões suaves em uma classe, adicione o traço MongoDB\Laravel\Eloquent\SoftDeletes como mostrado no seguinte exemplo de código :

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
use MongoDB\Laravel\Eloquent\SoftDeletes;
class Planet extends Model
{
use SoftDeletes;
}

Para saber mais sobre os métodos que você pode executar em modelos com as exclusões suaves ativadas, consulte Exclusão suave do Eloquent nos do Docs Laravel.

O Eloquent permite converter tipos de dados de atributo do modelo antes de armazenar ou recuperar dados usando um auxiliar de conversão. Esse auxiliar é uma alternativa conveniente para definir métodos acessadores e mutadores equivalentes em seu modelo.

No exemplo a seguir, o auxiliar de fundição converte o discovery_dt atributo de modelo , armazenado no MongoDB como MongoDB\BSON\UTCDateTime tipo para o datetime tipo Laravel .

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
protected $casts = [
'discovery_dt' => 'datetime',
];
}

Dica

Lança em Laravel 11

No Laravel 11, você pode definir um método casts() para especificar conversões de tipo de dados em vez de utilizar o atributo $casts . O código a seguir executa a mesma conversão do exemplo anterior usando um método casts() :

protected function casts(): array
{
return [
'discovery_dt' => 'datetime',
];
}

Para saber mais, consulte Fundição de Atributo na documentação do Laravel.

Esta conversão permite que você use o PHP DateTime ou a classe MongoDB para trabalhar com datas neste campo. O exemplo a seguir mostra uma query do Laravel que usa o auxiliar de conversão no modelo para fazer a query de planetas com um discovery_dt de menos de três anos atrás:

Planet::where( 'discovery_dt', '>', new DateTime('-3 years'))->get();

Para saber mais sobre MongoDB os tipos de dados do , consulte nos BSON types do MongoDB servidor Docs.

Para saber mais sobre o auxiliar de conversão do Laravel e os tipos suportados, consulte Fundição de Atributos nos do Docs Laravel.

O Eloquent permite criar vários modelos e seus dados de atributo passando uma array de dados para o método de modelo create() . Este processo de inserção de vários modelos é chamado de atribuição em massa.

A atribuição em massa pode ser uma maneira eficiente de criar vários modelos. No entanto, ele pode expor uma vulnerabilidade de segurança explorável. Os dados nos campos podem conter atualizações que levam a permissões ou acesso não autorizados.

O Eloquent fornece as seguintes características para proteger seus dados de vulnerabilidades de atribuição em massa:

  • $fillable contém os campos que são graváveis em uma atribuição em massa

  • $guarded contém os campos que são ignorados em uma atribuição em massa

Importante

Recomendamos usar $fillable em vez de $guarded para se proteger contra vulnerabilidades. Para saber mais sobre essa recomendações, consulte a Versão de segurança: Laravel 6.18.35, 7.24.0 artigo no site Laravel.

No exemplo seguinte, o modelo permite a atribuição em massa dos campos utilizando o atributo $fillable :

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
protected $fillable = [
'name',
'gravitational_force',
'diameter',
'moons',
];
}

O seguinte exemplo de código mostra a atribuição em massa do modelo Planet :

$planets = [
[ 'name' => 'Earth', 'gravitational_force' => 9.8, 'day_length' => '24 hours' ],
[ 'name' => 'Mars', 'gravitational_force' => 3.7, 'day_length' => '25 hours' ],
];
Planet::create($planets);

Os modelos salvos no banco de dados contêm somente os campos name e gravity , pois day_length é omitido do atributo $fillable .

Para saber como alterar o comportamento ao tentar preencher um campo omitido da $fillable array , consulte Exceções de atribuição de massa nos do Docs Laravel.

O Eloquent permite especificar critérios para excluir periodicamente dados do modelo que você não precisa mais. Quando você agenda ou executa o comando model:prune , o Laravel chama o método prunable() em todos os modelos que importam as características Prunable e MassPrunable para corresponder aos modelos para exclusão.

Para utilizar esta funcionalidade com modelos que utilizam MongoDB como banco de dados, adicione a importação apropriada ao seu modelo:

  • MongoDB\Laravel\Eloquent\Prunable opcionalmente, executa uma etapa de limpeza antes de excluir um modelo que corresponda aos critérios

  • MongoDB\Laravel\Eloquent\MassPrunable exclui modelos que correspondem aos critérios sem buscar os dados do modelo

Observação

Ao ativar exclusões suaves em um modelo consultável em massa, você deve importar os seguintes pacotes do Laravel MongoDB :

  • MongoDB\Laravel\Eloquent\SoftDeletes

  • MongoDB\Laravel\Eloquent\MassPrunable

Para saber mais sobre o recurso de remoção, consulte Modelos de Remoção nos do Docs Laravel.

A classe de podação a seguir inclui um método prunable() que corresponde aos modelos que a ação de podar exclui e um método pruning() que é executado antes de excluir um modelo correspondente:

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\Model;
use MongoDB\Laravel\Eloquent\Prunable;
class Planet extends Model
{
use Prunable;
public function prunable()
{
// matches models in which the solar_system field contains a null value
return static::whereNull('solar_system');
}
protected function pruning()
{
// Add cleanup actions, such as logging the Planet 'name' attribute
}
}

A seguinte classe prunable em massa inclui um método prunable() que corresponde a modelos que a ação de podar exclui:

<?php
namespace App\Models;
use MongoDB\Laravel\Eloquent\MassPrunable;
use MongoDB\Laravel\Eloquent\Model;
class Planet extends Model
{
use MassPrunable;
public function prunable()
{
// matches models in which the gravitational_force field contains
// a value greater than 0.5
return static::where('gravitational_force', '>', 0.5);
}
}

Voltar

Modelos eloquentes

Próximo

Relacionamentos