09

Dic

Publicado por: Jordi Mubaied | bases de datos | notorm | orm | php | programación orientada a objetos | tendencias programación

NotORM para PHP (Parte I)

NotORM es un ORM (Objeto-relacional mappers) de PHP muy ligero y fácil de utilizar, evidentemente se debe tener conocimientos en programación orientada a objetos para poder sacar el máximo provecho de este pequeño ORM. NotORM está aconsejado para pequeños proyectos sin complejidad de tablas y relaciones. NotORM nos agilizará el proceso de desarrollo sin tener que escribir sentencias SQL y consecuentemente nos libera de los errores cometidos por escribir y mantener estas sentencias.

Para explicar con mejor detalle los diferentes aspectos de NotORM os dejo el esquema de la base de datos que voy a utilizar para este ejemplo.

 

Table: author
+----+------------------------+
| id | name                   |
+----+------------------------+
|  1 | Khalil Gibran          |
|  2 | Sir Arthur Conan Doyle |
|  3 | Paulo Coelho           |
+----+------------------------+

Table: book
+----+-----------------+-----------+
| id | title           | author_id |
+----+-----------------+-----------+
|  1 | The Prophet     |         1 |
|  3 | Sherlock Holmes |         2 |
|  4 | The Alchemist   |         3 |
+----+-----------------+-----------+

Table: category
+----+------------+
| id | category   |
+----+------------+
|  1 | poem       |
|  2 | article    |
|  3 | tutorials  |
|  4 | philosophy |
|  5 | essays     |
|  6 | story      |
+----+------------+

Table: book_category
+----+---------+-------------+
| id | book_id | category_id |
+----+---------+-------------+
|  1 |       1 |           4 |
|  3 |       3 |           6 |
|  4 |       4 |           4 |
+----+---------+-------------+

 


Conectando a la Base de Datos

El primer paso para utilizar NotORM es crear una instancia del objeto NotORM el cual utiliza una conexión activa de PDO para interactuar con la base de datos.

<?php
$dsn = "mysql:dbname=library;host=127.0.0.1";
$pdo = new PDO($dsn, "dbuser", "dbpassword");
$library = new NotORM($pdo);

El Nombre de Origen de Datos o (DSN) es la forma común de describir una conexión de base de datos. Esta contiene el nombre del driver que se va a utilizar para la base de datos, el nombre de base de datos, y la dirección de host. El constructor de PDO acepta un DSN con nombre de usuario y la contraseña de la base de datos para conectarse. Una vez conectado, el objeto PDO se pasa a NotORM. Vamos a utilizar esta instancia NotORM lo largo de este artículo.

Recuperación Básica

Ahora que estamos conectados a través NotORM, haremos un listado de todos los libros en la base de datos.

<?php
$books = $library->book();
foreach ($books as $book) {
    echo $book["id"] . " "
    . $book["title"] . "<br>";
}

El resultado es:

1 The Prophet
3 Sherlock Holmes
4 The Alchemist

¡Es tan simple como eso! $library es el objeto NotORM y book es el nombre de la tabla donde se almacena nuestra información. El método book() devuelve una array multidimensional con la clave principal de la tabla en la primera columna como índice principal. Dentro del foreach, $book es una representación de un registro de book, una array de clave valor donde las claves son los nombres de las columnas en la tabla. $book[«title»] devuelve el valor de la columna de title para ese registro.

En la mayoría de los casos no estarás interesado en la recuperación de todas las columnas de la tabla. Puede especificar sólo las columnas que le interesan través del método select(). Por ejemplo, si sólo desea que te devuelva el título, entonces podrías reescribir el ejemplo de esta manera:

<?php
$books = $library->book()->select("title");
foreach ($books as $book) {
    echo $book["title"] . "<br>";
}

 

Recuperando columnas específicas en tablas que tienen un gran número de columnas es muy beneficioso, así de esta manera no tienes que perder el tiempo y memoria recuperando y almacenando valores que no vas a utilizar.

En las sentencias SQL para recuperar un registro de la tabla utilizando su clave primaria utilizaremos la cláusula
WHERE. En NotORM, hay muchas maneras de realizar esta tarea; la manera más fácil es usar la clave primaria como un índice como propiedad de la tabla.

<?php
$book = $library->book[1];
echo $book["title"];

Esto simplemente recuperar el detalle del book con ID 1.

Filtrado de resultados

NotORM permite filtrado de resultados con las condiciones que se especifican mediante la cláusula
WHERE mediante el método where(). Para ilustrar esto, vamos a buscar la tabla book con un título que contiene «Alchemist».

<?php
$books = $library->book->where("title LIKE ?", "%Alchemist%");
foreach ($books as $book) {
    echo $book["id"] . " "
    . $book["title"] . "<br>";
}

 

El resultado es:

4 The Alchemist

Si no estás familiarizado con declaraciones preparadas, te preguntaras lo que significa el signo de interrogación. Esto es una forma de parametrizar las consultas realizadas por la PDO de esta manera se puede ejecutar la misma consulta muchas veces con sólo cambiar los valores. El signo de interrogación actúan como un substituto de valor. Puedes leer más sobre declaraciones preparadas de PDO en el manual de PHP.

NotORM también te permite con el método where() aplicar más de una condición.

<?php
 $books = $library->book->where("title LIKE ?","%The%")->where("id < ?",5);
 foreach ( $books as $book){
 echo $book["id"] . " " . $book["title"] . "<br>";
 }
1 The Prophet
4 The Alchemist

El resultado que nos retorna NotORM para el ejemplo anterior es equivalente al que nos retornaría la siguiente consulta SQL.

SELECT * FROM book WHERE title LIKE "%The%" AND id < 5;

 

Ordenando los resultados

Puedes ordenar los resultados en base a una o más columnas, ascendente o descendente. El ejemplo que se da a continuación devolverá los libros por sus id en orden descendente.

<?php
    $books = $library->book->order("id desc");
    foreach ($books as $id => $book) {
        echo $id . " " . $book["title"] . "<br>";
    }
4 The Alchemist
3 Sherlock Holmes
1 The Prophet

Si deseas ordenar los resultados en función de más de una columna, puede especificarlos separándolos por comas.

<?php
    $books = $library->book->order("id desc, title asc");
    foreach ($books as $id => $book) {
        echo $id . " " . $book["title"] . "<br>";
    }

Los registros resultantes serán devueltos en el orden descendente de su id y si hay más de un registro con el mismo ID (por supuesto no habrá) será en orden ascendente del title.

NotORM también soporta limitar los resultados. Vamos a limitar los resultados a dos registros, a partir de la posición 0

<?php 
    $books = $library->book->limit(2,0); 
    foreach ( $books as $id => $book ){ 
        echo $id . " " . $book["title"] . "<br>"; 
    }

 

El resultado es:

1 The Prophet
3 Sherlock Holmes

Con esto queda explicado lo esencial de NotORM en la siguiente parte de este artículo entraremos en más profundidad con las relaciones entre tablas y como recuperar datos combinados.

 

Jordi Mubaied

Developer

 

Barcelona
Passeig Gaiolà 13
+34 933 801 144
Lleida
Carrer Agustins 7
+34 973 988 222
Andorra
(Escaldes-Engordany)
Parc de la Mola 10, AD700
Bogota
Carrera 9A #99-07 Piso 9. Despacho 02
Torre la Equidad