Hola a todos,
Estoy leyendo y aprendiendo Cakephp y estoy teniendo problemas con las relaciones HasAndBelongsToMany.
Tengo los siguientes modelos y relaciones:
Referencia:
<> : Relaciòn HABTM
times <> subjects
times <> comissions
times <> classrooms
times <> days
times <> hours
times belongsTo types
Necesito buscar y/o filtrar para cada Subjects su times...
A demàs cada times esta compuesto por comissions, classrooms, days, hours
Hice lo siguiente que no se si es correcto:
Código PHP:
Ver original$this->time->bindModel(array( 'SubjectsTime',
'ComissionsTime',
'ClassroomsTime',
'DaysTime',
'HoursTime'
)
));
$this->time->contain(array( 'SubjectsTime',
'ComissionsTime',
'ClassroomsTime',
'DaysTime',
'HoursTime',
'Subject.name',
'Comission.name',
'Classroom.name', 'Classroom.description', 'Classroom.address',
'Day.days',
'Hour.hours',
'Spindle.types'
));
$horarios = $this->time->find('all', array( 'fields' => array('Time.title'), 'recursive' => 1,
'conditions'=>array('SubjectsTime.subject_id' => 1) // id of subject ));
debug($horarios);
y el debug, me trae lo siguiente:
Código PHP:
Ver original(
(
(
[title] => Bioquìmica
[id] => 4
)
(
[types] => Teórico
[id] => 1
)
(
(
[name] => Aula 90
[description] => Hospital de Clínicas
[address] => Córdoba 2500
[ClassroomsTime
] => Array (
[id] => 6
[time_id] => 4
[classroom_id] => 1
)
)
)
(
(
[name] => Única
[ComissionsTime
] => Array (
[id] => 6
[comission_id] => 11
[time_id] => 4
)
)
)
(
)
(
(
[hours] => 18 - 22
(
[id] => 6
[time_id] => 4
[hour_id] => 3
)
)
)
(
(
[name] => BioquÃ*mica de la Nutrición
(
[id] => 13
[subject_id] => 1
[time_id] => 4
)
)
)
)
)
En la vista:
Código PHP:
Ver originalforeach ($horarios as $key => $horario) {
echo $horario['Time']['title'] . "<br />";
echo $horario['Spindle']['types'] . "<br />";
echo $horario['Subject'][$key]['name'] . "<br />";
echo $horario['Comission'][$key]['name'] . "<br />";
echo $horario['Classroom'][$key]['name'] . "<br />";
echo $horario['Day'][$key]['days'] . "<br />";
echo $horario['Hour'][$key]['hours'] . "<br />";
}
En teorìa me esta llevando lo correcto, sin embargo, otra de las dudas es en las vistas. Dónde dice $key, significa que puede haber más de un registro, cómo hago para llevar todos los registros independientemente de ese $key??
Hay alguna manera de hacer un set() más limpio desde el controlador?
Espero puedan ayudarme a entender esto...
Desde ya gracias.
***************
ACTUALIZO
***************
Hice esta bùsqueda desde el controlador
Código PHP:
Ver original$horarios = $this->subject->find('first', array( 'conditions' => array('Subject.id' => 1), 'Classroom', 'Comission', 'Day', 'Hour', 'Spindle'
)),
'fields' => array('Subject.name') ));
debug($horarios);
Lo que me trae el debug es lo siguiente:
Código PHP:
Ver original(
(
[name] => BioquÃ*mica de la Nutrición
[id] => 1
)
(
(
[id] => 4
[spindle_id] => 1
[title] => Bioquìmica
[description] => 1
(
[id] => 19
[subject_id] => 1
[time_id] => 4
)
(
[id] => 1
[types] => Teórico
)
(
(
[id] => 1
[name] => Aula 90
[description] => Hospital de Clínicas
[address] => Córdoba 2500
[ClassroomsTime
] => Array (
[id] => 12
[time_id] => 4
[classroom_id] => 1
)
)
)
(
(
[id] => 11
[name] => Única
[description] => Comisión Única
[created] => 2011-09-09
[modified] => 2011-09-09
[ComissionsTime
] => Array (
[id] => 13
[comission_id] => 11
[time_id] => 4
)
)
)
(
)
(
(
[id] => 3
[hours] => 18 - 22
(
[id] => 12
[time_id] => 4
[hour_id] => 3
)
)
)
)
)
Esto creo que es lo más adecuado. Para la materia con id 1 tengo el siguente Time con sus Classrooms, Comissions, Hours, Days.
Ahora bien...Còmo imprimo esto en las vistas? Tengo esta duda ya que son relaciones muy profundas y no se bien como llevarlo a la vista.
Vean esto:
Gracias...