У меня есть несколько таблиц. (чтобы удерживать все позиции), претендентов (для удержания всех претендентов) и assign_applicant (чтобы указать, какая позиция принадлежит тому, что заявитель - многие из многих).YII2 gridview не отображает правильные данные
Так данные, как для assign_applicant таблицы
pos applicant
2 1
2 3
3 4
3 5
Я хочу, чтобы отобразить записи, как это. но вместо этого он показывает:
pos applicant
2 1,3 (array)
3 4,5 (array)
Причина заключается в том (много) отношений:
public function getAssign()
{
return $this->hasMany(\admin\models\AssignApplicant::className(), ["job_position_id" => "id"]);
}
public function getApplicant()
{
return $this->hasOne(\admin\models\Applicant::className(), ["id" => "applicant_id"]) ->via('assign');
}
Здесь вы вид сетки:
<?=
GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'layout' => "{pager}\n{summary}\n{items}\n{pager}",
'filterPosition' => \yii\grid\GridView::FILTER_POS_HEADER,
'responsive' => true,
'hover' => true,
'resizableColumns' => true,
'floatHeader' => true,
'autoXlFormat' => true,
'export' => [
'fontAwesome' => true,
'showConfirmAlert' => true,
'target' => GridView::TARGET_BLANK
],
'panel' => [
'type' => 'primary',
'heading' => ''
],
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'attribute' => 'position',
'format' => 'raw',
'value' => function ($model)
{
return Html::a($model->positionName, yii\helpers\Url::toRoute(['position/update', 'id' => $model->position_id]));
}
],
[
'attribute' => 'applicantName',
'value' => 'applicantName'
],
],
]);
?>
Мой запрос (сыром виде):
SELECT `job_positions` . * , applicant.first_name, assign_applicant.id
FROM `job_positions`
LEFT JOIN `position` ON `job_positions`.`position_id` = `position`.`id`
INNER JOIN `assign_applicant` ON `job_positions`.`id` = `assign_applicant`.`job_position_id`
INNER JOIN `applicant` ON `assign_applicant`.`applicant_id` = `applicant`.`id`
WHERE (
`client_id` = '1'
)
AND (
`shift_id` = '1'
)
AND (
`date` = '2016-12-08'
)
ORDER BY `position`.`name`
LIMIT 20
Любой способ показать данные, как я хочу
Добавить код для GridView. Также у вас есть модель, представляющая таблицу 'assign_applicant'? – topher
@topher - добавленный код – Ish
Вместо того, чтобы показывать позиции со связанными кандидатами, показывайте кандидатов с соответствующими позициями. – Bizley