2017-01-06 3 views
0

У меня есть несколько таблиц. (чтобы удерживать все позиции), претендентов (для удержания всех претендентов) и 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 

Любой способ показать данные, как я хочу

+0

Добавить код для GridView. Также у вас есть модель, представляющая таблицу 'assign_applicant'? – topher

+0

@topher - добавленный код – Ish

+1

Вместо того, чтобы показывать позиции со связанными кандидатами, показывайте кандидатов с соответствующими позициями. – Bizley

ответ

0

yii2 намеренно removes duplicated models при обработке результаты.

ваш можете использовать applicants (или assign_applicant) в качестве основной модели, как @Bizley предложил или обработать полученные модели заранее (с помощью клонирования и populateRelation для получения желаемой структуры)

Смежные вопросы