Hola entiendo q tienes algunas dudas en el manejo de relaciones con CakePhp, ten encuenta que en el modelo de cada una de las tablas tienes que manejar la relacion ya sea hasmeny, belongsto, hasone, o hasmanyandbelonsto.
T dejo un pequeño ejemplo de una aplicacion que cumple basicamente con lo que buscas.
Tenemos dos tablas:
Alumnos
Id
Nombre
Curso_id
Cursos
Id
Nombre
En esta pequeña BD hay dos tablas que se relacionan 1 a n donde un curso puede tener muchos alumnos. (Ojo revisa las convenciones de cakephp, no importa si en tu bd existe esa relación)
Primero debes tener un controlador alumnos_controller.php con el siguiente código:
Código PHP:
Ver original<?php
class AlumnosController extends AppController {
var $name = 'Alumnos';
var $helpers = array('Form' ); function index() {
$this->Alumno->recursive = 0;
$alumnos = $this->Alumno->find('all');
$this->set('alumnos', $alumnos);
}
function add() {
if (!empty($this->data)) { $this->Alumno->create();
$this->Alumno->save($this->data);
$this->redirect(array('action'=>'index')); }
$cursos = $this->Alumno->Curso->find('list',array('fields'=>'Curso.nombre')); $this->set('cursos', $cursos);
}
}
?>
En tu controlador de cursos_controller.php coloca el siguiente código:
Código PHP:
Ver original<?php
class CursosController extends AppController {
var $name = 'Cursos';
function index() {
$this->Curso->recursive = 1;
$cursos = $this->Curso->find('all');
$this->set('cursos', $cursos);
}
function add()
{
{
$this->Curso->create();
if($this->Curso->save($this->data))
{
$this->Session->setFlash('El nuevo curso fue almacenado exitosamnete');
$this->redirect(array('action'=>'index'),null,true); }
else
{
$this->Session->setFlash('No se pudo almacenar los nuevos datos');
}
}
}
}
?>
Para el modelo de alumno.php coloca el siguiente código:
Código PHP:
Ver original<?php
class Alumno extends AppModel
{ var $name = 'Alumno';
var $belongsTo = 'Curso';
}
?>
En curso.php debes colocar lo siguiente:
Código PHP:
Ver original<?php
class Curso extends AppModel
{
var $name = 'Curso';
var $hasMany = 'Alumno';
}
?>
Para generar tus vistas debes hacerlo cada una para determinada acción en este caso te recomiendo que agregues una carpeta en: app/views/alumnos con el nombre del mismo controlador.
Haces lo propio en el mismo directorio para cursos.
Una vez creadas ambas carpetas crea los siguientes archivos:
Para alumnos creas un archivo index.ctp dentro la carpeta alumnos con lo siguiente:
Código PHP:
Ver original<h1>ALUMNOS</h1>
<?php if(empty($alumnos)):?> NO HAY ALUMNOS REGISTRADOS
<?php else:?>
<table>
<tr>
<th>Nombre</th>
<th>Curso</th>
</tr>
<?php foreach ($alumnos as $alumno):?>
<tr>
<td>
<?php echo $alumno['Alumno']['nombre']?>
</td>
<td>
<?php echo $alumno ['Curso']['nombre']?>
</td>
</tr>
<?php endforeach;?>
</table>
<?php endif;?><br />
<?php echo $html->link('Registrar Nuevo Alumno',array('action'=>'add'));?> <br />
Para alumnos tambien creas un archivo add.ctp con lo siguiente:
Código PHP:
Ver original<?php echo $form->create('Alumno');?>
<fieldset>
<legend>Añadir Nuevo Alumno</legend>
<?php
echo $form->input('nombre');
echo $form->input('curso_id');
?>
</fieldset>
<?php echo $form->end('Enviar');?> <?php echo $html->link('Ver todos los Alumnos registrados',array('action'=>'index'));?>
Ahora también creas el archivo index.ctp para cursos dentro de la carpeta usuarios con lo siguiente:
Código PHP:
Ver original<h1>CURSOS</h1>
<?php if(empty($cursos)):?> NO HAY CURSOS REGISTRADOS
<?php else:?>
<table>
<tr>
<th>Nombre</th>
</tr>
<?php foreach ($cursos as $curso):?>
<tr>
<td>
<?php echo $curso['Curso']['nombre']?>
</td>
</tr>
<?php endforeach;?>
</table>
<?php endif;?><br />
<?php echo $html->link('Registrar Nuevo Curso',array('action'=>'add'));?> <br />
<?php echo $html->link('Ver la lista de Alumnos',array('controller'=>'Alumnos','action'=>'index'));?><br />
Despues un archivo add.ctp con el siguiente código:
Código PHP:
Ver original<?php echo $form->create('Curso');?>
<fieldset>
<legend>Agregar Nuevo Curso</legend>
<?php
echo $form->input('nombre');
?>
</fieldset>
<?php echo $form->end('Guardar');?> <?php echo $html->link('Ver todos los Cursos registrados',array('action'=>'index'));?>
Esta pequeña aplicación registra estudiantes en diferentes cursos donde un estudiante pertenece a un curso y un curso tiene muchos estudiantes.
También la probé y funciona perfectamente si tienes alguna duda me preguntas.
Suerte y espero que te sirva, yo tambien estube sufriendo por aprender cake...