Overview
En esta página, aprenderá a actualizar Laravel MongoDB a una nueva versión principal. También incluye los cambios que debe realizar en su aplicación para actualizar la versión de la integración de Laravel sin perder funcionalidad, si corresponde.
Cómo actualizar
Antes de actualizar, realice las siguientes acciones:
Asegúrese de que la nueva versión de la biblioteca sea compatible con la versión del servidor MongoDB a la que se conecta su aplicación y con la versión de Laravel en la que se ejecuta. Consulte Página de compatibilidad para esta información.
Aborde cualquier cambio importante entre la versión de la integración de Laravel que su aplicación utiliza actualmente y la versión de actualización planificada en la sección Cambios importantes de esta guía.
Para actualizar la versión de su biblioteca, ejecute el siguiente comando en el directorio de su aplicación:
composer require mongodb/laravel-mongodb:5.6
Para actualizar a una versión diferente de la biblioteca, reemplace la información después
laravel-mongodb: con su número de versión preferido.
Cambios radicales
Un cambio importante 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 espera.
Los cambios importantes de esta sección se clasifican según las versiones principales que los introdujeron. Al actualizar las versiones de la biblioteca, tenga en cuenta todos los cambios importantes entre su versión actual y la versión de actualización prevista.
Cambios importantes en la versión 5.x
Esta versión de la biblioteca introduce los siguientes cambios importantes:
El generador de consultas devuelve los resultados como objetos
stdClassen lugar de matrices. Este cambio requiere que se cambie el acceso a la matriz por el acceso a la propiedad al interactuar con los resultados de la consulta.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.
Al usar un objeto
DateTimeInterface, incluidoCarbon, en una consulta, la biblioteca convierte el objetoDateTimeInterfaceen un objetoMongoDB\BSON\UTCDateTime. Esta conversión se aplica a los objetosDateTimeInterfaceque se pasan como filtros de consulta al métodowhere()o como datos que se pasan a los métodosinsert()yupdate().Para ver un ejemplo que pasa un objeto
Carbonal métodoDB::where(), consulte la Sección de ejemplo defechas de coincidencia de la guía del Generador de consultas.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 biblioteca también realiza esta conversión a los resultados del método
Model::raw()antes de hidratar una instancia de modelo.idEs un alias del campo_iden los documentos de MongoDB, y la biblioteca convierte automáticamente entreidy_idal consultar datos. El objeto de resultado de la consulta incluye un campoidque representa el campo_iddel documento. Debido a este comportamiento, no es posible tener dos camposidy_idseparados en los documentos.En5.1 la versión 7600, la biblioteca también realiza esta conversión a los
Model::raw()resultados del método antes de hidratar una instancia de modelo. Al pasar un filtro de consulta complejo, utilice elDB::where()método en lugarModel::raw()del.A partir de5.3 la versión 7600, puede deshabilitar la conversión automática de
ida_idpara documentos incrustados. Para obtener más información, consulte la sección "Deshabilitar el uso de la conversión del nombre del campo id" de la guía "Opciones de conexión".Elimina la compatibilidad con la propiedad
$collection. El siguiente código muestra cómo asignar una colección de MongoDB a una variable de la 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 anteriores a 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 biblioteca introduce los siguientes cambios importantes:
La versión mínima de Laravel ahora 10.0 es. 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, ejecutecomposer update.El espacio de nombres ahora es
MongoDB\Laravel\. Asegúrate de cambiar el espacio de nombres deJenssegers\Mongodb\aMongoDB\Laravel\en tus modelos y archivos de configuración.Elimina el soporte para proyectos que no sean Laravel.
Elimina la compatibilidad con la propiedad
$dates. Asegúrate de cambiar todas las instancias de$datesa$castsen los archivos del modelo.Model::unset($field)No persiste el cambio. Asegúrese de seguir todas las llamadas aModel::unset($field)conModel::save().Elimina el método
Query\Builder::whereAll($column, $values). Asegúrate de reemplazar todas las llamadas aQuery\Builder::whereAll($column, $values)porQuery\Builder::where($column, 'all', $values).Query\Builder::delete()Puede eliminar uno o todos los documentos. Asegúrese de pasar solo los valores1onullalimit().whereDate()Los métodoswhereDay(),whereMonth(),whereYear()ywhereTime()ahora utilizan operadores MongoDB en los campos de fecha.Añade el atributo
MongoDB\Laravel\Eloquent\MassPrunable. Asegúrate de reemplazar todas las instancias deIlluminate\Database\Eloquent\MassPrunableporMongoDB\Laravel\Eloquent\MassPrunableen tus modelos.Elimina la compatibilidad con los siguientes métodos
Query\Builder:toSql()toRawSql()whereColumn()whereFullText()groupByRaw()orderByRaw()unionAll()union()having()havingRaw()havingBetween()whereIntegerInRaw()orWhereIntegerInRaw()whereIntegerNotInRaw()orWhereIntegerNotInRaw()