Autor Tema: Consultas sql desde codeigniter abstrayendo las tipicas querys :D  (Leído 30209 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado 3l3cTr0n1k_0

  • Recién llegado
  • *
  • Mensajes: 47
  • Karma: +5/-1
    • Ver Perfil
    • El arte de programar
    • Email
Aunque pueda parecer difícil, hacer consultas en MySQL en CodeIgniter es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el framework. Es importante, sobretodo, que tengamos nuestro CodeIgniter correctamente configurado. Podéis echarle una ojeada al artículo de configuración y iniciación para ver como configuramos los datos de MySQL.

CodeIgniter, a parte, nos da la posibilidad de trabajar con más de una base de datos a la vez, configurando y conectando específicamente a una u otra dependiendo de las necesidades. Sin embargo, no es el objeto de esta explicación.

Supongamos que queremos hacer una consulta parecida a la siguiente:

SELECT * FROM entradas

Lo normal en PHP sería usar un mysql_query(”SELECT * FROM entradas”);, sin embargo en CodeIgniter (y usando librería específica) lo usaríamos de la siguiente forma:

Código: php [Seleccionar]

$this->db->query("SELECT * FROM entradas");


GET

Conclusión, podemos usarlo de la misma manera. Luego si quisiéramos estructurar los resultados podríamos usar la función foreach de PHP. Sin embargo, hay una manera mucho más fácil en CodeIgniter de tratar las consultas. Ellos lo llaman el Active Record Class y se emplearía, para el ejemplo de antes, así:

Código: php [Seleccionar]

$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas;


También en $this->db->get(); es posible usar un segundo parámetro para especificar un LIMIT:

Código: php [Seleccionar]

$query = $this->db->get("entradas", 10, 20);

// Genera: SELECT * FROM entradas LIMIT 20,10


SELECT

También podemos especificar el SELECT con $this->db->select(); tipo:

Código: php [Seleccionar]

$query = $this->db->select("id,title,body");
$query = $this->db->get("entradas");

// Genera: SELECT id,title,body FROM entradas


Existen algunas funciones de MySQL que tienen una propiedad de SELECT específica en CodeIgniter, sin embargo, solo los listaré ya que no los usaremos en aplicaciones básicas:


    * $this->db->select_max();
    * $this->db->select_min();
    * $this->db->select_avg();
    * $this->db->select_sum();


JOIN

Esto nos permite unir dos tablas tal que así:

Código: php [Seleccionar]

$query = $this->db->join("comentarios", "comentarios.id = entradas.id");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas JOIN comentarios ON comentarios.id = entradas.id


WHERE

Código: php [Seleccionar]

$query = $this->db->where("id","38");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id = '38'


Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:

Código: php [Seleccionar]

$query = $this->db->where("id","38");
$query = $this->db->where("name","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id = '38' AND name = 'Isern' AND surname = 'Palaus'


Pero claro, no todo son igualdades. Quizás queremos buscar una cosa que sea más pequeña que, o diferente, o mayor, etcétera. La forma es especificar en el primer campo, si no hay nada se tomará = por defecto:

Código: php [Seleccionar]

$query = $this->db->where("id >","38");
$query = $this->db->where("name !=","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas WHERE id > '38' AND name != 'Isern' AND surname = 'Palaus'


Al igual que SELECT, hay muchas más propiedades:

    * $this->db->or_where();
    * $this->db->where_in();
    * $this->db->or_where_in();
    * $this->db->where_not_in();
    * $this->db->or_where_not_in();


LIKE

Código: php [Seleccionar]

$query = $this->db->like("body","sentencia");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entras LIKE body = '%sentencia%'


Sin embargo, podría ser que no quisiéramos que las dos partes fueran aleatorias… De modo que podemos especificar en un tercer campo el % donde debe estar. Puede ser: before, both y after.

Código: php [Seleccionar]

$query = $this->db->like("body","sentencia1","before");
$query = $this->db->like("title","sentencia2","both");
$query = $this->db->like("slug","sentencia3","after");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas LIKE body = '%sentencia1' AND title = '%sentencia2%' AND slug = 'sentencia3%'


Otros tipos de LIKE que podemos usar son:

    * $this->db->not_like();
    * $this->db->or_not_like();
    * $this->db->group_by();


GROUP BY

En otras versiones se conocia como $this->db->groupby(); pero ha sido eliminado.

Código: php [Seleccionar]

$query = $this->db->group_by("title");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas GROUP BY title


DISTINCT

Para añadir DISTINCT a la consulta:

Código: php [Seleccionar]

$query = $this->db->distinct();
$query = $this->db->get("entradas");

// Genera: SELECT DISTINCT * FROM entradas


HAVING

Código: php [Seleccionar]

$query = $this->db->having("uid = 32");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas HAVING uid = 32


También es posible usar $this->db->or_having();


ORDER BY

$this->db->order_by(); permite ordenar un resultado en una dirección especifica. En el primer parámetro especificamos el nombre de la columna y en el segundo la dirección. Las posibilidades del segundo parámetro son: ASC, DESC y RANDOM.

Código: php [Seleccionar]

$query = $this->db->order_by("id","DESC");
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas ORDER BYid DESC


LIMIT

Permite especificar el limite de resultados que quieres que devuelva:

Código: php [Seleccionar]

$query = $this->db->limit(30);
$query = $this->db->get("entradas");

// Genera: SELECT * FROM entradas LIMIT 10


COUNT ALL

Permite contar el numero de entradas que hay en una tabla:

Código: php [Seleccionar]

$num = $this->db->count_all("entradas");

// Genera: un numero que lo podemos tratar como una variable o escribirlo



COUNT ALL RESULTS

A diferencia de COUNT ALL, nos permite contar el numero de resultados en la actual consulta:

Código: php [Seleccionar]

$query = $this->db->where("name","Isern");
$query = $this->db->get("entradas");

$num = $this->db->count_all_results();

// Genera: un numero


INSERT

Para insertar datos usando el Active Record de CodeIgniter debemos usar un array luego insertar:

Código: php [Seleccionar]

$insert = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");

$this->db->insert("entradas",$insert);

// Genera: INSERT INTO entradas (title, body, name, surname) VALUES ('Test', 'Test', 'Isern', 'Palaus')



UPDATE

Al igual que INSERT usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:

Código: php [Seleccionar]

$update = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");

$this->db->where("id","3");
$this->db->update("entradas",$update);

// Genera: UPDATE entradas SET title = 'Test', body = 'Test', name = 'Isern', surname = 'Palaus' WHERE id = 3


DELETE

Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:

Código: php [Seleccionar]

$this->db->where("id","3");
$this->db->delete("entradas");

// Genera: DELETE FROM entradas WHERE id = 3


Y esto es más o menos todo lo que nos ofrece CodeIgniter para tratar nuestras bases de datos. Espero que haya servido de ayuda a más de uno ya que muchas visitas recibidas buscaban como usar MySQL en CodeIgniter.


Saludos...
Si has encontrado útil este articulo recuerda que puedes ayudarnos con tu donación voluntaria la cual ayudará al staff y a la mantención del foro.

shannonbit

  • Visitante
Re:Consultas sql desde codeigniter abstrayendo las tipicas querys :D
« Respuesta #1 : enero 31, 2013, 03:12:42 am »
Hola muchas gracias por la entrada. Es muy buen aporte. Gracias por compartir el conocimiento.
atte: http://twitter.com/shannonbit

Desconectado navicat

  • Recién llegado
  • *
  • Mensajes: 1
  • Karma: +0/-0
    • Ver Perfil
Re:Consultas sql desde codeigniter abstrayendo las tipicas querys :D
« Respuesta #2 : enero 31, 2013, 08:56:15 am »
hola a todos me presento een este grann foro

Soy amante de codeigniter, que opinan ,  cual es la mejor forma de hacer relaciones entre tablas existe datamapper o tambien Doctrine

o existe otra opcion? cuando creen que es necesario usar estos Orm?

Gracias

linux-genesis

  • Visitante
Re:Consultas sql desde codeigniter abstrayendo las tipicas querys :D
« Respuesta #3 : febrero 05, 2013, 09:36:56 am »
Excelente articulo, alcanza lo mas utilizado en las operaciones mysql.

Realmente la utilización de un ORM, es la internacionalizacion de BD al quedar configurado tus sentencias en las app. Solo requieres escoger a que bd apuntara y tu sistema sin ningun problema estará funcionando.

Otra ventaja es la seguridad e inyeccion de ataques xss por ejemplo, etc ...

Saludos ... :)

Juan

  • Visitante
Re:Consultas sql desde codeigniter abstrayendo las tipicas querys :D
« Respuesta #4 : octubre 30, 2015, 01:22:22 pm »
Hola Muchas Gracias Por La Información Fue De Gran Ayuda


. . . . . . . .