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.8
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 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 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()
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 in MongoDB, which is not the native format. Remove the cast to store native BSON arrays. If you must keep JSON string storage, 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 storage protected $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.