2017-01-06 146 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以获得所需的结构)