Visão geral
Nesta página, você pode aprender como atualizar o Laravel MongoDB para uma nova versão principal. Esta página também inclui as alterações que você deve fazer no seu aplicação para atualizar sua versão da integração com o Laravel sem perder a funcionalidade, se aplicável.
Como fazer a atualização
Antes de atualizar, execute as seguintes ações:
Certifique-se de que a nova versão da biblioteca seja compatível com a versão do MongoDB Server à qual seu aplicativo se conecta e com a versão do Laravel em que seu aplicativo executa. Consulte a página de compatibilidade para ver essas informações.
Resolva quaisquer alterações importantes entre a versão da integração com o Laravel que seu aplicação agora usa e a versão de atualização planejada na seção Alterações Importantes deste guia.
Aborde quaisquer avisos de descontinuação para sua versão atual na seção Descontinuações deste guia.
Para atualizar sua versão da biblioteca, execute o seguinte comando no diretório do aplicativo:
composer require mongodb/laravel-mongodb:5.12Para atualizar para outra versão da biblioteca, substitua as informações após laravel-mongodb: pelo número da versão desejada.
Mudanças de última hora
Uma alteração interruptiva significativa é uma modificação em uma convenção ou comportamento em uma versão específica da integração com o Laravel que pode impedir que seu aplicação funcione conforme o esperado.
As mudanças significativas nesta seção são categorizadas pelas versões principais que as introduziram. Ao atualizar as versões da biblioteca, resolva todas as alterações significativas entre sua versão atual e a versão de atualização planejada.
Versão 5.x: mudanças importantes
Esta versão da biblioteca introduz as seguintes alterações de quebra:
O construtor de query retorna resultados como objetos
stdClassem vez de arrays. Essa alteração exige que você altere o acesso da array ao acesso à propriedade ao interagir com os resultados da query.O código a seguir mostra como recuperar um resultado de query e acessar uma propriedade do objeto de resultado em versões mais antigas em comparação com a v5.0:
$document = DB::table('accounts') ->where('name', 'Anita Charles') ->first(); // older versions$document['balance']; // v5.0$document->balance;Remove o suporte para as seguintes classes:
MongoDB\Laravel\Auth\DatabaseTokenRepository. Em vez disso, use a classeIlluminate\Queue\Failed\DatabaseFailedJobProviderpadrão e especifique uma conexão com o MongoDB.MongoDB\Laravel\Queue\Failed\MongoFailedJobProvider. Em vez disso, use a classeIlluminate\Queue\Failed\DatabaseFailedJobProviderpadrão e especifique uma conexão com o MongoDB.
Ao usar um objeto
DateTimeInterface, incluindoCarbon, em uma query, a biblioteca converte oDateTimeInterfaceem um objetoMongoDB\BSON\UTCDateTime. Essa conversão se aplica a objetosDateTimeInterfacepassados como filtros de query para o métodowhere()ou como dados passados para os métodosinsert()eupdate().Para visualizar um exemplo que passa um objeto
Carbonpara o métodoDB::where(), consulte a seção Exemplo de correspondência de datas do guia Construtor de queries.Nos resultados da consulta, a biblioteca converte objetos BSON
UTCDateTimeem classes de dataCarbon, aplicando o fuso horário padrão.No v5.1, a biblioteca também executa essa conversão para os resultados do método
Model::raw()antes de ativar uma instância do modelo.idé um alias para o campo_idem documentos MongoDB e a biblioteca converte automaticamente entreide_idao executar query de dados. O objeto de resultado da query inclui um campoidpara representar o campo_iddo documento. Devido a esse comportamento, você não pode ter dois camposide_idseparados em seus documentos.No v5.1, a biblioteca também executa essa conversão para os resultados do método
Model::raw()antes de ativar uma instância do modelo. Ao passar um filtro de query complexo, use o métodoDB::where()em vez deModel::raw().A partir de v5.3, você pode desabilitar a conversão automática de
idpara_idpara documentos incorporados. Para saber mais, consulte a seção Desativar o uso da conversão de nome de campo ID do guia Opções de conexão.Remove o suporte para a propriedade
$collection. O código a seguir mostra como atribuir uma coleção MongoDB a uma variável em sua classeUserem versões mais antigas em comparação com a v5.0:use MongoDB\Laravel\Eloquent\Model; class User extends Model{ protected $keyType = 'string'; // older versions protected $collection = 'app_user'; // v5.0 protected $table = 'app_user'; ...}Esta versão também modifica os métodos
DBeSchemaassociados para acessar uma collection do MongoDB . O código a seguir mostra como acessar a coleçãoapp_userem versões mais antigas em comparação com a v5.0:use Illuminate\Support\Facades\Schema;use Illuminate\Support\Facades\DB;use MongoDB\Laravel\Schema\Blueprint; // older versionsSchema::collection('app_user', function (Blueprint $collection) { ... });DB::collection('app_user')->find($id); // v5.0Schema::table('app_user', function (Blueprint $table) { ... });DB::table('app_user')->find($id);A partir da v5.9, a versão mínima do Laravel é 12.0. Para obter instruções sobre como atualizar sua versão do Laravel, consulte o Guia de atualização na documentação do Laravel.
A partir da v5.9, a versão mínima do PHP é 8.2. Antes de atualizar, confirme se o seu aplicativo é executado em uma versão compatível do PHP.
A partir da v5.11, o método
where()interpreta um valor de array como um valor literal nas seguintes condições:Você passa 3 argumentos para o método
where().Um desses argumentos é o operador
=.Outro argumento é um valor de array.
Em versões anteriores, a integração com o Laravel passava o array para o MongoDB como um documento de operador, o que poderia injetar condições de query não intencionais. Para aprender mais, consulte Valores de Array no guia do Query Construtor e o problema CVE-2026-88022. relacionado.
A partir de v5.12, a configuração de conexão
prefixse aplica aos métodos de esquema no construtor de esquemas da biblioteca, assim como no Laravel. Os métodoshasTable(),dropIfExists(),getColumns()egetIndexes()agora aplicam o prefixo ao nome da coleção que você passa. O mesmo se aplica agetColumnListing(),getIndexListing()ehasIndex(), que delegam paragetColumns()egetIndexes(). Para saber mais sobre essa configuração, consulte Configuração de conexão do banco de dados Laravel.Se o seu aplicação passar um nome de coleção prefixado para esses métodos, passe o nome não prefixado. Por exemplo, se sua conexão usa um
prefixdeapp_, chameSchema::hasTable('users')em vez deSchema::hasTable('app_users').hasCollection()egetCollection()não fazem parte da API de esquema do Laravel. Eles continuam a receber o nome da coleção conforme armazenado no MongoDB, para que os métodos possam usar um nome prefixado.Esta versão também corrige um problema de migração: antes de v5.12,
php artisan migratecom um prefixo recria o repositório de migração em cada execução e executa todas as migrações novamente.
Alterações significativas na versão 4.x
Esta versão da biblioteca introduz as seguintes alterações de quebra:
A versão mínima do Laravel agora é 10.0. Para obter instruções sobre como atualizar sua versão do Laravel, consulte o Guia de atualização na documentação do Laravel.
O nome da dependência agora é
"mongodb/laravel-mongodb". Certifique-se de que o nome da dependência em seu arquivocomposer.jsonseja"mongodb/laravel-mongodb": "^4.0". Em seguida, executecomposer update.O namespace agora é
MongoDB\Laravel\. Certifique-se de alterar o namespace deJenssegers\Mongodb\paraMongoDB\Laravel\em seus modelos e arquivos de configuração.Remove o suporte para projetos que não sejam do Laravel.
Remove o suporte para a propriedade
$dates. Certifique-se de alterar todas as instâncias de$datespara$castsem seus arquivos de modelo.Model::unset($field)não persiste a alteração. Certifique-se de seguir todas as chamadas paraModel::unset($field)comModel::save().Remove o método
Query\Builder::whereAll($column, $values). Certifique-se de substituir todas as chamadas paraQuery\Builder::whereAll($column, $values)porQuery\Builder::where($column, 'all', $values).Query\Builder::delete()pode excluir um ou todos os documentos. Certifique-se de passar somente os valores1ounullparalimit().whereDate(),whereDay(),whereMonth(),whereYear()ewhereTime()métodos agora utilizam operadores MongoDB em campos de data.Adiciona o traço
MongoDB\Laravel\Eloquent\MassPrunable. Certifique-se de substituir todas as instâncias deIlluminate\Database\Eloquent\MassPrunableporMongoDB\Laravel\Eloquent\MassPrunableem seus modelos.Remove o suporte para os seguintes métodos
Query\Builder:toSql()toRawSql()whereColumn()whereFullText()groupByRaw()orderByRaw()unionAll()union()having()havingRaw()havingBetween()whereIntegerInRaw()orWhereIntegerInRaw()whereIntegerNotInRaw()orWhereIntegerNotInRaw()
Itens obsoletos
Um aviso de descontinuação indica que um recurso está programado para remoção em uma versão principal futura. Aborde os avisos de descontinuação em seu aplicativo antes de atualizar para a próxima versão principal.
Versão 5.8 Itens obsoletos
A partir do Laravel MongoDB v5.8, o tipo de conversão array para atributos de modelo Eloquent está obsoleto. Usar array como um tipo de conversão armazena valores de atributos como strings codificadas em JSON no MongoDB, o que não é o formato BSON nativo. Quando você grava em um atributo que usa a conversão array, a biblioteca emite o seguinte aviso de obsolescência:
USER DEPRECATED The "array" cast on attribute "<attribute>"of model "<Model>" stores values as a JSON-encoded string inMongoDB, which is not the native format. Remove the cast tostore native BSON arrays. If you must keep JSON stringstorage, use the "json" cast explicitly.O aviso de descontinuação inclui o nome do atributo afetado e da classe de modelo.
Para migrar os atributos do seu modelo para versões futuras, use uma das seguintes opções:
Remova o
arraycast (recomendado). Sem um tipo de cast, o MongoDB armazena e recupera nativamente arrays PHP como arrays BSON. O código a seguir mostra como atualizar seu modelo:// Before (deprecated in v5.8)protected $casts = [ 'options' => 'array',]; // After: remove the cast to use native BSON storageprotected $casts = [ // other casts...];Substitua
arrayporjsonpara manter explicitamente o armazenamento de string JSON:protected $casts = [ 'options' => 'json',];
Se um campo já contiver um array BSON nativo e o modelo ainda usar a conversão array, a biblioteca o lerá corretamente.
Importante
Antes de remover o array cast de um campo, migre todos os valores de string codificados em JSON existentes no campo para arrays BSON nativos. A biblioteca não migra automaticamente os dados existentes.