Version 6, last updated by phillipo at Sep 17 21:19 2007 UTC

31.1 ¿Como usar Asociaciones?

Primero que todo vamos a crear algunas tablas (PostgreSQL ó MySQL) para ilustrar mejor el ejemplo.

Tabla clientes

Column Type Modifiers
idintegernot null default nextval('clientes_id_seq')
nombrecharacter varying(40) 
telefonocharacter varying(40) 
direccioncharacter varying(50) 
modified_indate 
fecha_atdate 
estadocharacter(1) 
Indexes:
"clientes_pkey" PRIMARY KEY, btree (id)

Tabla ciudad

Column Type Modifiers
idintegernot null default nextval('ciudad_id_seq')
nombrecharacter varying(40) 
Indexes:
"clientes_pkey" PRIMARY KEY, btree (id)

Una llave foránea implicita en clientes que es ciudad_id esta definida por convención de

ActiveRecord pero también puede agregarse un control de llave foránea a nivel de RBDM. Ahora, creamos los modelos en nuestro proyecto en Kumbia:

Ejemplo

  1. ?php
  2.  
  3. class Ciudad extends ActiveRecord {
  4.  
  5. public function __construct(){
  6. $this->has_many('clientes');
  7. }
  8. }
  9.  
  10. ?>

Ejemplo

  1. ?php
  2.  
  3. class Clientes extends ActiveRecord {
  4. public function __construct(){
  5. $this->belongs_to('ciudad');
  6. }
  7. }
  8.  
  9. ?>

Ahora veamos como funciona:

Ejemplo

  1. ?php
  2.  
  3. class PruebaController extends ApplicationController {
  4.  
  5. public function index(){
  6.  
  7. # Busco el cliente con id = 3
  8. $this->Clientes->find(3);
  9.  
  10. # Muestro el nombre de la ciudad que corresponde a ese cliente
  11. $this->render_text($this->Clientes->getCiudad()->nombre);
  12.  
  13. # Busco la ciudad con id=2
  14. $this->Ciudad->find(2);
  15. # Ahora muestro todos los clientes que tenga esa ciudad
  16. foreach($this->Ciudad->getClientes() as $cliente){
  17. $this->render_text($cliente->nombre);
  18. }//fin foreach
  19.  
  20. }//fin funcion index
  21.  
  22. }//fin de la clase
  23.  
  24. ?>



Regresar al indice