Товарищи, не могу понять как вывести на странице данные из двух таблиц с inner join.
Еще точнее, вообще не могу реализовать вывод собственного запроса. Перечитал много документации и вопросов, но пока не соображаю.
Есть две таблицы: teachers и discipline. В discipline имеется столбец teacher_id. Нужно вывести преподавателей из teachers с прикрепленными к ним именами дисциплинам из discipline (teachers.id = discipline.teacher_id).
Сам запрос отрабатывает как надо.
SELECT
`teachers`.`FIO`,
`discipline`.`name`
FROM
`teachers` INNER JOIN `discipline`
ON
`teachers`.`id` = `discipline`.teacher_id
Как составить запрос, чтобы можно было вывести дисциплины к преподавателю? По документации не выходит создать свой запрос, чтобы он заработал в views файле.
Сам вывод на страницу сейчас такой.
Контроллер (для страницы views/teachers/all.php)
...
public function actionAll()
{
$query = Teachers::find();
$pagination = new Pagination([
'defaultPageSize' => 15,
'totalCount' => $query->count(),
]);
$teachers = $query->orderBy('FIO')
->offset($pagination->offset)
->limit($pagination->limit)
->all();
return $this->render('all', [
'teachers' => $teachers,
'pagination' => $pagination,
]);
}
...
Модельclass Teachers extends ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'teachers';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['id', 'FIO'], 'required'],
[['id', 'lead_krb', 'lead_magist', 'ped_practices', 'jobs_zav_kaf', 'lead_aspir'], 'integer'],
[['classes_subject', 'lead_practice', 'job_gak'], 'number'],
[['FIO'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'FIO' => 'ФИО',
'classes_subject' => 'Занятия по дисциплинам',
'lead_practice' => 'Рук-во практикой',
'lead_krb' => 'Рук-во КРБ',
'lead_magist' => 'Рук-во маг.диссертацией',
'ped_practices' => 'Пед. практика',
'job_gak' => 'Работа ГАК, защита',
'jobs_zav_kaf' => 'Работа по заданию зав.каф.',
'lead_aspir' => 'Рук-во аспирантами',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getDisciplines()
{
return $this->hasMany(Discipline::className(), ['teacher_id' => 'id']);
}
/**
* @inheritdoc
* @return TeachersQuery the active query used by this AR class.
*/
public static function find()
{
return new TeachersQuery(get_called_class());
}
Представление<h1>Преподаватели</h1>
<table class="table table-hover table-bordered">
<thead>
<tr>
<th>ФИО</th>
<th>Дисциплина</th>
<th>Занятия по дисциплинам</th>
<th>Руководство практикой</th>
<th>Руководства КРБ</th>
<th>Руководство маг.диссертацией</th>
<th>Педагогич. практика</th>
<th>Работа ГАК, защита</th>
<th>Работа по заданию зав.каф.</th>
<th>Руководство аспирантами</th>
</tr>
</thead>
<tbody>
<?php foreach ($teachers as $teacher): ?>
<tr>
<td><?= $teacher->FIO ?></td>
<td> дисциплина</td>
<td><?= $teacher->classes_subject ?></td>
<td><?= $teacher->lead_practice ?></td>
<td><?= $teacher->lead_krb ?></td>
<td><?= $teacher->lead_magist ?></td>
<td><?= $teacher->ped_practices ?></td>
<td><?= $teacher->job_gak ?></td>
<td><?= $teacher->jobs_zav_kaf ?></td>
<td><?= $teacher->lead_aspir ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?= LinkPager::widget(['pagination' => $pagination]) ?>