Buenas de nuevo Mayrem.
Una materia sólo puede ser impartida por un profesor??? entonces no necesitas la tabla intermedia Materias_Profesores.
Creo que tu problema es que no tienes cogido el punto a q Yii es un framework MVC (Modelo-Vista-Controlador).
En primer lugar decirte que el error:
CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[42703]: Undefined column: 7 ERROR: no existe la columna «mayrem»
LINE 1: SELECT * FROM "materia" "t" WHERE maestro= mayrem
^. The SQL statement executed was: SELECT * FROM "materia" "t" WHERE maestro= mayrem
Se debe a que tu id es un string, con lo que debes encerrarlo entre comillas simples:
$criteria->condition = "maestro= '" . Yii::app()->user->getId() . "'";
Aunque no sé pq envías un dataprovider si sólo quieres mostrar los datos de un modelo en tu vista index… No tienes pq utilizar un DetailView para esto, puedes enviar un modelo a la vista index y simplemente mostrar los datos del mismo.
Segundo, al ser Yii un framework MVC, y teniendo bien definidos los modelos de datos, simplemente recogiendo un modelo MAESTRO ya tienes todo lo que exista relacionado con un maestro.
Te voy a poner un ejemplo con modelos (cambia los nombres de las propiedades por las tuyas, no te olvides) y suponiendo que una materia sólo pueda ser impartida por un profesor:
public function actionIndex()
{
$model = Maestro::model()->findByAttributes('codigo_usuario' => Yii::app()->user->getId());
$this->render('index',
array(
'model'=>$model,
));// Pasamos a nuestra vista index el modelo con TODOS los datos de nuestro profesor.
}
En tu modelo Maestro tendrás algo como (esto es muy importante, pq las relaciones son las que nos
permiten que el modelo profesor tenga todos sus datos relacionados en el momento de crearlo):
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'relacion_materias' => array(self::HAS_MANY, 'Materias', 'codigo_profesor')
);
}
En tu vista index (simplemente te voy a hacer echos, tú lo formateas como quieras):
echo('Nombre profesor:' . $model->nombre_profesor);
echo('Materias impartidas:<br />');
if(isset($model->relacion_materias))// Si el profesor tiene materias.
{
foreach($model->relacion_materias as $materia)
{
echo($materia->nombre_materia . '<br />');
}
}
Si tuvieses una tabla intermedia en el caso de que una materia pudiese ser impartida por varios profesores, tendrías lo mismo, pero además para recuperar los datos de las materias tendrías que añadir la relación de la tabla intermedia con la tabla Materias: $model->relacion_t_intermedia[indice]->relacion_t_intermedia_materias por ejemplo.
En tu modelo Maestro:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'relacion_intermedia' => array(self::HAS_MANY, 'Materias_Profesor', 'codigo_profesor')
);
}
En tu modelo intermedio Materias_Profesor:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'relacion_t_intermedia_materias' => array(self::BELONGS_TO, 'Materias', 'codigo_materia')
);
}
echo('Nombre profesor:' . $model->nombre_profesor);
echo('Materias impartidas:<br />');
if(isset($model->relacion_t_intermedia))// Si el profesor tiene materias.
{
foreach($model->relacion_intermedia as $rel)
{
if(isset($rel->relacion_t_intermedia_materias))
{
echo($rel->relacion_t_intermedia_materias->nombre_materia . '<br />');
}
else
{
echo('relación mal hecha o se eliminó la materia asociada);
}
}
}
Creo q no me he equivocado en el código.
Cualquier cosa ya sabes.
Un saludo.