【问题标题】:YII2 gridview dont display the correct dataYII2 gridview 不显示正确的数据
【发布时间】:2017-01-07 00:02:22
【问题描述】:

我有几张桌子。职位(持有所有职位),申请人(持有所有申请人)和assign_applicant(说明哪个职位由哪个申请人担任 - 多对多reln)。

所以数据就像 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 - 添加代码
  • 显示有相关职位的申请人,而不是显示相关职位的职位。
  • @Bizley 2 我没明白你的意思。
  • 您显然列出了所有显示相关申请人的职位。因为一个职位有很多申请人,所以你得到了很多。而是列出所有申请人 - 每个申请人都与他申请的一个职位相关联 - 这样列表看起来就像你想要的那样。

标签: php gridview yii2


【解决方案1】:

yii2 在处理结果时故意removes duplicated models

您可以使用applicants(或assign_applicant)作为@Bizley 建议的主要模型 或事先处理生成的模型(使用克隆和populateRelation 获得所需的结构)

【讨论】:

    猜你喜欢
    • 2016-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多