【发布时间】: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 我没明白你的意思。
-
您显然列出了所有显示相关申请人的职位。因为一个职位有很多申请人,所以你得到了很多。而是列出所有申请人 - 每个申请人都与他申请的一个职位相关联 - 这样列表看起来就像你想要的那样。