Phalcon - Mapeador de documentos de objetos
Antes de comenzar con los conceptos de Object Relational Mapper (ORM) y Object Document Mapper (ODM), es importante comprender la diferencia entre las bases de datos SQL y NoSQL.
La siguiente tabla destaca las diferencias entre SQL y NoSQL:
SQL | NoSQL |
---|---|
También se denominan bases de datos relacionales (RDBMS) | Se denominan bases de datos distribuidas o no relacionales |
La estructura de la base de datos está constituida por tablas y vistas. | Consiste en bases de datos basadas en documentos y gráficos |
Incluye un esquema predefinido | Tiene un esquema dinámico |
Es muy poderoso para definir y manipular datos. | Es poderoso para mantener datos como colección de documentos. |
Phalcon tiene la capacidad de mapear con bases de datos SQL y NoSQL. Esto se logra con la ayuda de Object Document Mapper (ODM) para la base de datos NoSQL y Object Relational Mapper (ORM) para la base de datos SQL.
En Phalcon, el concepto ORM comprende la creación de un modelo asociado con el nombre de tabla dado, como hemos visto en los capítulos anteriores. Sigue todas las restricciones de integridad referencial.
Mapeador de documentos de objetos (ODM)
Es un objeto asociado a la base de datos NoSQL. Como sugiere el nombre, asigna el módulo relacionado con el documento. Phalcon lo usa para mapear con bases de datos como MongoDB.
Ejemplo
Step 1 - Crea una base de datos de MongoDB llamada “test”. Usaremos esta base de datos para mapear y obtener la respuesta adecuada.
Step 2- Verifique los registros insertados en la base de datos. El comando asociado con él es:
db.collection.find()
Se observa que cada documento se asigna con ObjectId, que es una característica de ODM. El valor deObjectId es único y luego se usa para obtener todos los datos almacenados con respecto a esa identificación en particular.
Step 3- Configurar modelo para la base de datos creada. Un modelo es una clase que se extiendePhalcon\Mvc\Collection. Test.php modelo incluirá el siguiente código.
<?php
use Phalcon\Mvc\Collection;
class Test extends Collection {
public function initialize() {
$this->setSource("test");
}
}
Step 4 - Configurar el proyecto incluyendo la conectividad de la base de datos en services.php.
// Simple database connection to localhost
$di->set(
"mongo",
function () {
$mongo = new MongoClient();
return $mongo->selectDB("test");
},
true
);
// Connecting to a domain socket, falling back to localhost connection
$di->set(
"mongo",
function () {
$mongo = new MongoClient(
"mongodb:///tmp/mongodb-27017.sock,localhost:27017"
);
return $mongo->selectDB("test");
},
true
);
Step 5 - Imprime los valores con respecto a ObjectId con la ayuda de TestController.php.
<?php
use Phalcon\Mvc\Controller;
class TestController extends Controller {
public function index() {
// Find record with _id = "5087358f2d42b8c3d15ec4e2"
$test = Test::findById("5819ab6cfce9c70ac6087821");
echo $test->data;
}
}
La salida mostrará datos que coincidan con el objectId. Si el objectId no coincide con los registros de los documentos, no se mostrará la salida adecuada a medida que se recupere el número de registros.