Overview
En esta página, puedes aprender cómo actualizar Laravel MongoDB a una nueva versión principal. Esta página también incluye los cambios que debes realizar en tu aplicación para actualizar tu versión de Laravel Integration sin perder funcionalidad, si corresponde.
Cómo actualizar
Antes de actualizar, realiza las siguientes acciones:
Asegúrate de que la nueva versión de la librería sea compatible con la versión de MongoDB Server a la que se conecta tu aplicación y la versión de Laravel en la que se ejecuta tu aplicación. Consulta la página de Compatibilidad para obtener esta información.
Aborda cualquier cambio disruptivo entre la versión de Laravel Integration que tu aplicación usa actualmente y la versión de actualización planificada en la sección Cambios disruptivos de esta guía.
Aborde cualquier aviso de desuso para su versión actual en la sección Desusos de esta guía.
Para actualizar la versión de tu librería, ejecuta el siguiente comando en el directorio de tu aplicación:
composer require mongodb/laravel-mongodb:5.8
Para actualizar a una versión diferente de la librería, reemplaza la información después de laravel-mongodb: con tu número de versión preferido.
cambio disruptivo
Un cambio disruptivo es una modificación en una convención o comportamiento en una versión específica de la Integración de Laravel que podría impedir que su aplicación funcione como se esperaba.
Los cambios disruptivos en esta sección están categorizados según las principales versiones que los introdujeron. Al actualizar las versiones de la librería, aborda todos los cambios disruptivos entre tu versión actual y la versión planificada para la actualización.
Versiones 5.x cambios disruptivos
Esta versión de la librería presenta los siguientes cambios disruptivos:
El generador de query devuelve los resultados como
stdClassobjetos en lugar de como arreglos. Este cambio requiere que cambie el acceso a arreglos por acceso a propiedades al interactuar con resultados de queries.El siguiente código muestra cómo recuperar un resultado de query y acceder a una propiedad del objeto resultado en versiones antiguas en comparación con la v5.0:
$document = DB::table('accounts') ->where('name', 'Anita Charles') ->first(); // older versions $document['balance']; // v5.0 $document->balance; Elimina el soporte para las siguientes clases:
MongoDB\Laravel\Auth\DatabaseTokenRepository. En cambio, utiliza la claseIlluminate\Queue\Failed\DatabaseFailedJobProviderpor defecto y especifica una conexión a MongoDB.MongoDB\Laravel\Queue\Failed\MongoFailedJobProvider. En cambio, utiliza la claseIlluminate\Queue\Failed\DatabaseFailedJobProviderpor defecto y especifica una conexión a MongoDB.
Cuando se utiliza un
DateTimeInterfaceobjeto, incluidaCarbon, en una consulta, la librería convierte el/laDateTimeInterfaceen un objetoMongoDB\BSON\UTCDateTime. Esta conversión se aplica a losDateTimeInterfaceobjetos pasados como filtros de query al métodowhere()o como datos pasados a los métodosinsert()yupdate().Para ver un ejemplo que pasa un objeto
Carbonal métodoDB::where(), consulta la sección Ejemplo de Fechas Matcheadas de la guía del Generador de query.En los resultados de la query, la librería convierte los objetos BSON
UTCDateTimea clases de fechaCarbon, aplicando la zona horaria por defecto.En v5.1, la librería también realiza esta conversión a los resultados del método
Model::raw()antes de hidratar una instancia del Modelo.ides un alias para el campo_iden documentos de MongoDB, y la librería convierte automáticamente entreidy_idal consultar datos. El objeto de resultado de la query incluye un campoidque representa el campo_iddel documento. Debido a este comportamiento, no puedes tener dos camposidy_idseparados en tus documentos.En la v5.1, la librería también realiza esta conversión a los resultados del método
Model::raw()antes de hidratar una instancia de Modelo. Al pasar un filtro de query complejo, utiliza el métodoDB::where()en lugar deModel::raw().A partir de v5.3, puedes desactivar la conversión automática de
ida_idpara los documentos incrustados. Para obtener más información, consulte la sección Desactivar el uso de conversión de nombres de campo "id" de la guía Opciones de conexión.Se remueve la compatibilidad con la propiedad
$collection. El siguiente código muestra cómo asignar una colección de MongoDB a una variable en tu claseUseren versiones anteriores a la 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 versión también modifica los métodos
DBySchemaasociados para acceder a una colección de MongoDB. El siguiente código muestra cómo acceder a la colecciónapp_useren versiones antiguas en comparación con la 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);
Cambios disruptivos en la versión 4.x
Esta versión de la librería presenta los siguientes cambios disruptivos:
La versión mínima de Laravel ahora es 10.0. Para obtener instrucciones sobre cómo actualizar tu versión de Laravel, consulta la Guía de actualización en la documentación de Laravel.
El nombre de la dependencia ahora es
"mongodb/laravel-mongodb". Asegúrese de que el nombre de la dependencia en su archivocomposer.jsonsea"mongodb/laravel-mongodb": "^4.0". Luego, ejecutacomposer update.El namespace ahora es
MongoDB\Laravel\. Asegúrate de cambiar el namespace deJenssegers\Mongodb\aMongoDB\Laravel\en tus modelos y archivos de configuración.Remueve el soporte para proyectos que no sean de Laravel.
Se elimina el soporte para la propiedad
$dates. Asegúrate de cambiar todas las instancias de$datesa$castsen tus archivos de modelo.Model::unset($field)no conserva el cambio. Asegúrate de que sigues todas las llamadas aModel::unset($field)conModel::save().Elimina el método
Query\Builder::whereAll($column, $values). Asegúrese de reemplazar todas las llamadas aQuery\Builder::whereAll($column, $values)porQuery\Builder::where($column, 'all', $values).Query\Builder::delete()puedes borrar uno o todos los documentos. Asegúrate de pasar solo los valores1onullalimit().whereDate(),whereDay(),whereMonth(),whereYear(), ywhereTime()métodos ahora utilizan operadores de MongoDB en campos de fecha.Agrega el
MongoDB\Laravel\Eloquent\MassPrunablerasgo. Asegúrate de reemplazar todas las instancias deIlluminate\Database\Eloquent\MassPrunableporMongoDB\Laravel\Eloquent\MassPrunableen tus modelos.Remueve el soporte para los siguientes métodos de
Query\Builder:toSql()toRawSql()whereColumn()whereFullText()groupByRaw()orderByRaw()unionAll()union()having()havingRaw()havingBetween()whereIntegerInRaw()orWhereIntegerInRaw()whereIntegerNotInRaw()orWhereIntegerNotInRaw()
Obsolescencias
Un aviso de desuso indica que una funcionalidad está programada para eliminarse en una versión principal futura. Aborde los avisos de desuso en su aplicación antes de actualizar a la siguiente versión principal.
Versión 5.8 Obsolescencias
A partir de Laravel MongoDB v5.8, el tipo de conversión array para los atributos del modelo Eloquent está obsoleto. El uso de array como tipo de conversión almacena los valores de los atributos como cadenas codificadas en JSON en MongoDB, que no es el formato BSON nativo. Cuando escribe en un atributo que utiliza la conversión array, la librería emite el siguiente aviso de obsolescencia:
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.
El aviso de desuso incluye el nombre del atributo afectado y la clase de modelo.
Para migrar los atributos de su modelo para futuras versiones, utilice una de las siguientes opciones:
Remover el tipo de conversión
array(recomendado). Sin un tipo de conversión, MongoDB almacena y recupera de forma nativa los arreglos PHP como arreglos BSON. El siguiente código muestra cómo actualizar su modelo:// Before (deprecated in v5.8) protected $casts = [ 'options' => 'array', ]; // After: remove the cast to use native BSON storage protected $casts = [ // other casts... ]; Reemplace
arrayconjsonpara mantener explícitamente el almacenamiento de string JSON:protected $casts = [ 'options' => 'json', ];
Si un campo ya contiene un arreglo BSON nativo y el modelo aún utiliza la conversión array, la librería lo lee correctamente.
Importante
Antes de remover la conversión array de un campo, migre los valores de string codificados en JSON existentes en el campo a arreglos BSON nativos. La librería no migra automáticamente los datos existentes.