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 aplicação se conecta e com a versão do Laravel em que seu aplicação é executado. Consulte a página de Compatibilidade do para obter 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.
Para atualizar sua versão da biblioteca, execute o seguinte comando no diretório do aplicativo:
composer require mongodb/laravel-mongodb:5.5
Para 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 ver um exemplo que passa um
Carbonobjeto para oDB::where()método, consulte a seção Exemplo de datas de correspondência 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 versions Schema::collection('app_user', function (Blueprint $collection) { ... }); DB::collection('app_user')->find($id); // v5.0 Schema::table('app_user', function (Blueprint $table) { ... }); DB::table('app_user')->find($id);
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()