Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Estas en el tema de ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos en esta ocasión vamos a aprender a cómo utilizar el Active Record de ZanPHP con unos ejemplos bastante sencillos. Primero que nada ...
  #1 (permalink)  
Antiguo 21/09/2011, 10:37
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Información ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Hola a todos en esta ocasión vamos a aprender a cómo utilizar el Active Record de ZanPHP con unos ejemplos bastante sencillos.

Primero que nada necesitamos crear una nueva aplicación, en esta ocasión le llamaremos "agenda" y crearemos su respectiva carpeta dentro de applications/, de igual forma la carpeta controllers/ y models/ dentro de la aplicación.

Lo siguiente será crear una base de datos con la siguiente tabla y algunos registros para empezar:

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `zan_agenda` (
  2.   `ID_Contact` mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `Name` VARCHAR(50) NOT NULL,
  4.   `Email` VARCHAR(50) NOT NULL,
  5.   `Phone` VARCHAR(15) NOT NULL,
  6.   PRIMARY KEY (`ID_Contact`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3;
  8.  
  9. INSERT INTO `zan_agenda` (`ID_Contact`, `Name`, `Email`, `Phone`) VALUES
  10. (1, 'Carlos Santana', '[email protected]', '324346456'),
  11. (2, 'Héctor Ceron', '[email protected]', '21323432');

Una vez creada la tabla y los registros de prueba, vamos a crear nuestro controlador, favor de copiar y guardar el siguiente código con el nombre controller.agenda.php.

Código PHP:
<?php
/* Access from index.php: */
if(!defined("_access")) {
    die(
"Error: You don't have permission to access here...");
}

class 
Agenda_Controller extends ZP_Controller {
    
    public function 
__construct() {
        
$this->application $this->app("agenda");
        
        
$this->Agenda_Model $this->model("Agenda_Model");

        
$this->Templates $this->core("Templates");
        
        
$this->Templates->theme(_webTheme);
    }
    
    public function 
index() {        
        print 
__("Hi, I'm agenda");
    }
    
    public function 
getContact($contactID 0) {
        
$data $this->Agenda_Model->getContact($contactID);
        
        
____($data);
    }
    
    public function 
getContactByEmail($email NULL) {
        
$data $this->Agenda_Model->getContactByEmail($email);
        
        
____($data);    
    }
    
    public function 
getContactBySearch($search NULL) {
        
$data $this->Agenda_Model->getContactBySearch($search);
        
        
____($data);    
    }
    
    public function 
getContactByQuery() {
        
$data $this->Agenda_Model->getContactByQuery();
        
        
____($data);    
    }
}
?>
En este controlador cargamos nuestro modelo Agenda y en cada método del controlador mandamos a llamar a cada método del modelo, y el resultado ($data) le pasamos la función ____() (4 guiones bajos) el cual es el equivalente a hacer un die(var_dump()), para que nos muestren los datos. Una vez creado nuestro controlador, procedemos a crear nuestro modelo, copiamos y guardamos el siguiente código en la carpeta de models/ con el nombre de model.agenda.php.

Código PHP:
<?php
/*Access from index.php: */
if(!defined("_access")) {
    die(
"Error: You don't have permission to access here...");
}

class 
Agenda_Model extends ZP_Model {
    
    private 
$table;
    private 
$primaryKey;
    
    public function 
__construct() {
        
$this->Db $this->db();
        
        
$this->helpers();
        
        
$this->table "agenda";
    }
    
    public function 
getContact($contactID) {
        
$this->Db->table($this->table);
        
$this->Db->cache(TRUE);
        
$this->Db->encode(TRUE);
        
        
$data $this->Db->find($contactID);
        
        return 
$data;
    }
    
    public function 
getContactByEmail($email) {
        
$this->Db->table($this->table);
        
$this->Db->cache(TRUE);
        
$this->Db->encode(TRUE);
        
        
$data $this->Db->findBy("Email"$email);
        
        return 
$data;
    }
    
    public function 
getContactBySearch($search) {
        
$this->Db->table($this->table);
        
$this->Db->cache(TRUE);
        
$this->Db->encode(TRUE);
        
        
$data $this->Db->findBySQL("Name LIKE '%$search%'");
        
        return 
$data;
    }
    
    public function 
getContactByQuery() {
        
$this->Db->select("Name, Email, Phone");
        
$this->Db->from($this->table);
        
$this->Db->where(array("Name" => "Carlos Santana""Email" => "[email protected]"));
        
        
$data $this->Db->get();
        
        return 
$data;    
    }    
}
?>
El código es bastante sencillo de entender, en el constructor cargamos nuestro objeto $this->Db (ActiveRecord), cargamos todos los helpers con $this->helpers(); y por último definimos la tabla en la que vamos a trabajar con $this->table = "agenda".

En los primeros tres métodos seleccionamos nuestra tabla ($this->Db->table($this->table)), activamos el cache para esa consulta ($this->Db->cache(TRUE)) y le decimos que nos regrese los datos con un encode en utf8 ($this->Db->encode(TRUE)).

El primer método getContact($contactID), utiliza el método del ActiveRecord $this->Db->find($contactID), el cual únicamente se le necesita pasar el ID del registro que queremos buscar, nos retornará una matriz en caso de haber encontrado el registro o en caso contrario nos retornará un FALSE.

El siguiente método getContactByEmail($email), utiliza el método del ActiveRecord $this->Db->findBy("Email", $email), el cúal le pasas el campo por el que quieres buscar y después el valor con el que lo quieres comparar, nos retornará una matriz en caso de haber encontrado uno o varios registros o en caso contrario nos retornará un FALSE.

El método getContactBySearch($search), utiliza el método del ActiveRecord $this->Db->findBySQL("Name LIKE '%$search%'"), el cúal le pasas una consulta WHERE libre, nos retornará una matriz en caso de haber encontrado uno o varios registros o en caso contrario nos retornará un FALSE.

Por último el método getContactByQuery(), utiliza distintos métodos del ActiveRecord, es una forma alternativa de hacer consultas, y es más parecido a realizar una consulta casi manualmente, utiliza los métodos $this->select() para seleccionar los campos que queremos usar, $this->from() para seleccionar la tabla que vamos a utilizar, y $this->Db->where() nos genera la consulta por medio de un array, cada posición concatena un AND a la consulta, y por último para obtener los resultados utilizamos $this->Db->get(), nos retornará una matriz en caso de haber encontrado uno o varios registros o en caso contrario nos retornará un FALSE.

Para probar nuestra aplicación en cada método lo hacemos de la siguientes maneras.
  • http://localhost/ZanPHP/index.php/es/agenda/getcontact/1
  • http://localhost/ZanPHP/index.php/es/agenda/getcontactbyemail/[email protected]
  • http://localhost/ZanPHP/index.php/es/agenda/getcontactbysearch/carlos
  • http://localhost/ZanPHP/index.php/es/agenda/getcontactbyquery/

Espero les haya sido de ayuda este pequeño tutorial, cualquier duda o pregunta pueden hacernosla por medio de Twitter en @ZanPHP o visitenos en nuestro sitio web www.zanphp.com, saludos.
  #2 (permalink)  
Antiguo 22/09/2011, 05:57
Avatar de pablofmorales  
Fecha de Ingreso: abril-2008
Ubicación: Buenos Aires, Argentina, Argentina
Mensajes: 222
Antigüedad: 16 años, 1 mes
Puntos: 37
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Veo varias cosas mal, en como manejas esto


1- Tenes el mismo problema que codeigniter de usar un mapa de modelos ( $this->model('nombre_modelo') ), esto es bastante molesto cuando estas trabajando con un IDE y queres desde el controller acceder a un metodo de ese modelo. Por ejemplo si quiero acceder al metodo $this->model('users')->save(); y le doy F3 a save() en eclipse, o ctrl + b en netbeans, no va a abrir nada. Me va a dejar donde estoy, esto es porque no puede relacionar el metodo model(), con el archivo que contiene el modelo.

2- Por otro lado haces $this->Agenda_Model = $this->model("Agenda_Model");

y despues usas $data = $this->Agenda_Model->getContact($contactID);

No vi como esta hecho en el core, pero tranquilamente podrias hacer

$data = $this->model('Agenda_Model')->getContact($contactID);
Sin la necesidad de generar propiedades que no existen, o no declaraste anteriormente.

3- Trabajas sobre supuestos, por ejemplo, $this->app(); $this->model(); $this->core(), $this->theme(); no tengo idea que hacen, los nombres de los modelos deberian ser mas descriptivos como getModel(), setTheme, no me di cuenta que hace el resto.

Lo mismo con esa constante que tenes _webTheme, donde se configura? Porque no es una constante de clase?

y ni hablar del metodo ____(); ahi me descolocaste totalmente.

4- En el modelo tenes un metodo llamado getContactByQuery, pero nunca le pasaste la query

5- Standard en el codigo, esto es importante mas si queres que otras personas trabajen con estas librerias. Por un lado tenes la propiedad $this->application y por otra tenes propiedades Templates, en una la primer letra es mayuscula y la segunda minuscula.



Saludos y suerte con el FW
__________________
blog
  #3 (permalink)  
Antiguo 22/09/2011, 06:05
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Cita:
Iniciado por pablofmorales Ver Mensaje
Veo varias cosas mal, en como manejas esto
1- Tenes el mismo problema que codeigniter de usar un mapa de modelos ( $this->model('nombre_modelo') ), esto es bastante molesto cuando estas trabajando con un IDE y queres desde el controller acceder a un metodo de ese modelo. Por ejemplo si quiero acceder al metodo $this->model('users')->save(); y le doy F3 a save() en eclipse, o ctrl + b en netbeans, no va a abrir nada. Me va a dejar donde estoy, esto es porque no puede relacionar el metodo model(), con el archivo que contiene el modelo.
Creo que eso antes que un problema de los FW es más bien de los IDE, porque no tienen previsto ese uso, no creo que un FW este mal diseñado o implementado por el simple hecho que tu IDE no entienda el funcionamiento... el IDE sale después que el lenguaje..

Respecto al resto de puntos opino igual, nomenclatura mejorable, suerte y ánimo con el FW!

Un saludo!
__________________
Gracias por el Karma :D

empleo ofertas de trabajo
  #4 (permalink)  
Antiguo 22/09/2011, 11:32
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Muchas gracias por tus sugerencias, las tomaremos en cuenta para nuestra próxima versión! :)
  #5 (permalink)  
Antiguo 22/09/2011, 11:35
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Por cierto, todas tus dudas pueden ser aclaradas con la documentación, olvide anexarla antes, mil disculpas, saludos cordiales.

http://www.zanphp.com/wiki/
  #6 (permalink)  
Antiguo 22/09/2011, 11:36
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Cita:
Iniciado por miktrv Ver Mensaje
Creo que eso antes que un problema de los FW es más bien de los IDE, porque no tienen previsto ese uso, no creo que un FW este mal diseñado o implementado por el simple hecho que tu IDE no entienda el funcionamiento... el IDE sale después que el lenguaje..

Respecto al resto de puntos opino igual, nomenclatura mejorable, suerte y ánimo con el FW!

Un saludo!
Muchas gracias :)
  #7 (permalink)  
Antiguo 22/09/2011, 11:41
 
Fecha de Ingreso: septiembre-2011
Mensajes: 9
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: ZanPHP: Ejemplos básicos de cómo utilizar el ActiveRecord

Cita:
Iniciado por pablofmorales Ver Mensaje
Veo varias cosas mal, en como manejas esto


1- Tenes el mismo problema que codeigniter de usar un mapa de modelos ( $this->model('nombre_modelo') ), esto es bastante molesto cuando estas trabajando con un IDE y queres desde el controller acceder a un metodo de ese modelo. Por ejemplo si quiero acceder al metodo $this->model('users')->save(); y le doy F3 a save() en eclipse, o ctrl + b en netbeans, no va a abrir nada. Me va a dejar donde estoy, esto es porque no puede relacionar el metodo model(), con el archivo que contiene el modelo.

2- Por otro lado haces $this->Agenda_Model = $this->model("Agenda_Model");

y despues usas $data = $this->Agenda_Model->getContact($contactID);

No vi como esta hecho en el core, pero tranquilamente podrias hacer

$data = $this->model('Agenda_Model')->getContact($contactID);
Sin la necesidad de generar propiedades que no existen, o no declaraste anteriormente.

3- Trabajas sobre supuestos, por ejemplo, $this->app(); $this->model(); $this->core(), $this->theme(); no tengo idea que hacen, los nombres de los modelos deberian ser mas descriptivos como getModel(), setTheme, no me di cuenta que hace el resto.

Lo mismo con esa constante que tenes _webTheme, donde se configura? Porque no es una constante de clase?

y ni hablar del metodo ____(); ahi me descolocaste totalmente.

4- En el modelo tenes un metodo llamado getContactByQuery, pero nunca le pasaste la query

5- Standard en el codigo, esto es importante mas si queres que otras personas trabajen con estas librerias. Por un lado tenes la propiedad $this->application y por otra tenes propiedades Templates, en una la primer letra es mayuscula y la segunda minuscula.



Saludos y suerte con el FW
La función ____() (4 guiones bajos) es el equivalente a hacer un die(var_dump()), saludos.

Etiquetas: activerecord, php, zanphp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:39.