Overview
En esta guía, puede aprender a usar Laravel MongoDB para acceder y administrar bases de datos y colecciones de MongoDB.
MongoDB organiza los datos en una estructura jerárquica. Una implementación de MongoDB contiene una o más bases de datos, y cada base de datos contiene una o más colecciones. En cada colección,MongoDB almacena los datos como documentos que contienen pares de campo y valor. En la integración de Laravel, se puede acceder a los documentos mediante modelos de Eloquent.
Para obtener más información sobre el formato de datos del documento, consulte Documentos en el manual del servidor.
Especificar la base de datos en una configuración de conexión
Puede especificar un nombre de base de datos que una conexión utiliza en su aplicación. config/database.php Archivo. La propiedad connections de este archivo almacena toda la información de conexión a la base de datos, como la cadena de conexión, el nombre de la base de datos y, opcionalmente, los detalles de autenticación. Tras especificar una conexión a la base de datos, puede realizar operaciones a nivel de base de datos y acceder a las colecciones que contiene.
Si asigna el nombre de la base de datos en la propiedad database al nombre de una base de datos inexistente, Laravel seguirá estableciendo una conexión válida. Al insertar datos en una colección de la base de datos, el servidor los crea automáticamente.
El siguiente ejemplo muestra cómo establecer una conexión de base de datos predeterminada y crear una conexión de base de datos a la base de datos animals en el archivo config/database.php configurando las propiedades dsn y database:
'default' => 'mongodb', 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], ... ]
Cuando configura una conexión de base de datos predeterminada, la integración de Laravel utiliza esa conexión para las operaciones, pero puede especificar múltiples conexiones de base de datos en su archivo config/database.php.
El siguiente ejemplo muestra cómo especificar múltiples conexiones de base de datos (mongodb y mongodb_alt) para acceder a las bases de datos animals y plants:
'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'animals', ], 'mongodb_alt' => [ 'driver' => 'mongodb', 'dsn' => 'mongodb://localhost:27017/', 'database' => 'plants', ] ], ...
Nota
El controlador PHP de MongoDB reutiliza la misma conexión al crear dos clientes con la misma cadena de conexión. Usar dos conexiones para dos bases de datos distintas no supone ninguna sobrecarga, por lo que no es necesario optimizar las conexiones.
Si su aplicación contiene múltiples conexiones de bases de datos y desea almacenar su modelo en una base de datos distinta de la predeterminada, anule la propiedad $connection en su clase Model.
El siguiente ejemplo muestra cómo anular la propiedad $connection en la clase de modelo Flower para usar la conexión mongodb_alt. Esto indica a la integración de Laravel que almacene el modelo en la colección flowers de la base de datos plants, en lugar de en la base de datos predeterminada:
class Flower extends Model { protected $connection = 'mongodb_alt'; }
Acceder a una colección
Cuando crea una clase de modelo que extiende MongoDB\Laravel\Eloquent\Model, la integración de Laravel almacena los datos del modelo en una colección con un nombre formateado como la forma plural (casi sin sentido) del nombre de su clase de modelo.
Por ejemplo, si crea una clase de modelo llamada Flower, Laravel aplica el modelo a la colección flowers en la base de datos.
Tip
Para aprender a especificar un nombre de colección diferente en su clase de modelo, consulte la Cambiar la sección Nombre de la colección de modelos de la guía de clases de modelos de Eloquent.
Generalmente recomendamos usar el ORM Eloquent para acceder a una colección, lo que facilita la legibilidad y el mantenimiento del código. El siguiente ejemplo especifica una operación de búsqueda mediante la clase Flower, de modo que Laravel recupera los resultados de la colección flowers:
Flower::where('name', 'Water Lily')->get()
Nota
A partir de la versión 7600 de Laravel Integration,4.8 el DB::collection() método está obsoleto. Como se muestra en el siguiente ejemplo, puede usar el DB::table() método para acceder a una colección de MongoDB.
Si no puedes realizar tu operación utilizando un modelo Eloquent, puedes acceder al generador de query llamando al método table() en la fachada DB. El siguiente ejemplo muestra la misma consulta que el ejemplo anterior, pero la consulta se construye utilizando el método DB::table():
DB::connection('mongodb') ->table('flowers') ->where('name', 'Water Lily') ->get()
Listar colecciones
Puede realizar cualquiera de las siguientes acciones para ver información sobre las colecciones en una base de datos:
Ejecutar un comando de Shell
Puede enumerar las colecciones en una base de datos ejecutando el siguiente comando en su shell desde el directorio raíz de su proyecto:
php artisan db:show
Este comando proporciona información sobre la base de datos configurada y lista sus colecciones bajo el encabezado Table. Para obtener más información sobre el comando db:show, consulta Laravel: Nuevo comandos de BD en el blog oficial de Laravel.
Llamar a métodos de base de datos o esquema
Puede enumerar las colecciones en una base de datos llamando a los siguientes métodos en su aplicación:
DB::listCollections(): enumera información sobre cada colección mediante el generador de consultasSchema::getTablesListing(): enumera el nombre de cada colección utilizando el generador de esquemasSchema::getTables(): enumera el nombre y el tamaño de cada colección utilizando el generador de esquemas
Nota
MongoDB es una base de datos con esquemas flexibles, por lo que los métodos de creación de esquemas anteriores consultan los datos de la base de datos en lugar del esquema.
Ejemplo
El siguiente ejemplo accede a la base de datos de la conexión y luego llama al método de generación de consultas listCollections() para recuperar información sobre las colecciones en la base de datos:
$collections = DB::connection('mongodb')->getDatabase()->listCollections();
Lista de campos de colección
Puede realizar cualquiera de las siguientes acciones para ver información sobre cada campo de una colección:
Ejecutar un comando de Shell
Puedes ver una lista de campos en una colección ejecutando el siguiente comando en tu shell desde el directorio raíz de tu proyecto:
php artisan db:table <collection name>
Este comando genera cada campo de colección y su tipo de dato correspondiente bajo el Column encabezado. Para más información sobre el db:table comando, consulta Laravel: Nuevos comandos de base de datos en el blog oficial de Laravel.
Llamar a métodos de esquema
Puede enumerar los campos de una colección llamando al método de generación de esquemas Schema::getColumns() en su aplicación.
También puede utilizar los siguientes métodos para devolver más información sobre los campos de colección:
Schema::hasColumn(string $<collection>, string $<field name>): comprueba si el campo especificado existe en al menos un documentoSchema::hasColumns(string $<collection>, string[] $<field names>): comprueba si cada campo especificado existe en al menos un documento
MongoDB es una base de datos flexible en cuanto a esquemas, por lo que los métodos anteriores queryan los datos de la colección en vez del esquema de la base de datos. Si la colección especificada no existe o está vacía, estos métodos devuelven un valor de false.
Nota
id Alias
A partir de Laravel MongoDB v5.1, el método getColumns() representa el nombre del campo _id en una colección MongoDB como el alias id en la lista de nombres de campo devuelta. Se puede pasar _id o id a los métodos hasColumn() y hasColumns().
Ejemplo
El siguiente ejemplo pasa un nombre de colección al método Schema::getColumns() para recuperar cada campo de la colección flowers:
$fields = Schema::getColumns('flowers');
Crear y eliminar colecciones
Para aprender cómo crear y eliminar colecciones, consulte la sección Realizar migraciones de Laravel en la guía del generador de esquemas.
Descartar una base de datos
Para borrar una base de datos de tu implementación de MongoDB, llama al método getMongoClient() en la fachada DB para acceder a tu cliente. Luego, llama al método dropDatabase() de la librería PHP de MongoDB y pasa el nombre de la base de datos a borrar como argumento.
El siguiente ejemplo elimina una base de datos llamada test_database:
$client = DB::getMongoClient(); $client->dropDatabase('test_database');