如何在GridView Yii2中获取合并的数组列表数据


how to get merged array list data in GridView Yii2

这里有两个表

  1. 员工详细信息
  2. 索赔流程

在employeedetails中,我有8列:

公司名称、雇员代码、雇员名称、父亲名称、母亲名称、妻子名称、子女名称和子女名称

在Claimprocess表中,我有5列:

Company_name、Employeecode、Employme_name、Healthcard_no和claim_for

在Claimprocess中,我为employeecode设置了一个依赖下拉列表。例如,如果管理员选择了一个自动显示从属employeecode的company_name,那么管理员再次选择一个会自动显示employee_name和员工关系名称(如父亲名称、母亲名称、妻子名称等)的employeecode

这是employee_code的相关下拉代码,选择company_name

claimform.php

<?= $form->field($model, 'company_id')->widget(Select2::classname(), [
            'data' => ArrayHelper::map(Company::find()->all(),'id','companyname'),
            'language' => 'en',
            'options' => [
            'placeholder' => 'Select a company ...',
            'onchange' => '
                                $.post( "index.php?r=employeedetails/lists&id='.'"+$(this).val(), function( data ) {
                                  $( "select#claimprocess-employee_id" ).html( data );
                                });',
            ],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]); 
?>

employeedetailscontroller.php

public function actionLists($id)
{
    $countEmployeedetails = Employeedetails::find()
            ->where(['company_id' => $id])
            ->count();
    $employeedetails = Employeedetails::find()
            ->where(['company_id' => $id])
            ->all();
    if($countEmployeedetails>0){
        foreach($employeedetails as $employee){
            echo "<option value='".$employee->id."'>".$employee->employeecode."</option>";
        }
    }
    else{
        echo "<option>-</option>";
    }
}

通过选择employeecode ,这是employee_name和relations_name的依赖下拉代码

claimform.php

<?= $form->field($model, 'employee_id')->widget(Select2::classname(), [
            'data' => ArrayHelper::map(Employeedetails::find()-   >all(),'id','employeecode'),
            'language' => 'en',
            'options' => [
            'placeholder' => 'Select a employeecode ...',
            'onchange' => '
                                $.post( "index.php?r=employeedetails/lists2&id='.'"+$(this).val(), function( data ) {
                                  $( "select#claimprocess-claim_for" ).html( data );
                                }),
                                $.post( "index.php?r=employeedetails/lists1&id='.'"+$(this).val(), function( data ) {
                                  $( "select#claimprocess-employee_name" ).html( data );
                                });',
            ],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]); 
?>

employeedetailscontroller.php

public function actionLists1($id)
{
    $countEmployeedetails = Employeedetails::find()
            ->where(['id' => $id])
            ->count();

    $employeedetails = Employeedetails::find()
            ->where(['id' => $id])
            ->all();
    if($countEmployeedetails >= 0)
    {
        foreach($employeedetails as $employee)
        {
            echo "<option value='".$employee->id."'>".$employee->name."</option>";
        }
    }
    else{
        echo "<option>-</option>";
    }
}
public function actionLists2($id)
{
    $countEmployeedetails = Employeedetails::find()
            ->where(['id' => $id])
            ->count();

    $employeedetails = Employeedetails::find()
            ->where(['id' => $id])
            ->all();
    if($countEmployeedetails >= 0)
    {
        foreach($employeedetails as $employee)
        {
                echo "<option value='".$employee->id."'>".$employee->father_name."</option>";
                echo "<option value='".$employee->id."'>".$employee->mother_name."</option>";
                echo "<option value='".$employee->id."'>".$employee->wife_name."</option>";
                echo "<option value='".$employee->id."'>".$employee->child1_name."</option>";
                echo "<option value='".$employee->id."'>".$employee->child2_name."</option>";
        }
    }
    else{
        echo "<option>-</option>";
    }
}

在claim_for字段中,我必须选择特定员工的关系名称,所以我所做的是使用array_merge组合所有关系字段,如父亲名称、母亲名称等,我得到了一个表单中的名称。

claimform.php

<?php
          $em = ArrayHelper::map(Employeedetails::find()-  >all(),'id','father_name');
         $emp = ArrayHelper::map(Employeedetails::find()->all(),'id','mother_name');
        $emp1 = ArrayHelper::map(Employeedetails::find()->all(),'id','wife_name');
        $emp2 = ArrayHelper::map(Employeedetails::find()->all(),'id','child1_name');
        $emp3 = ArrayHelper::map(Employeedetails::find()->all(),'id','child2_name');
        $print = array_merge($em,$emp,$emp1,$emp2,$emp3);
        // echo "<pre>";print_r($print);exit();echo "</pre>";
        echo $form->field($model, 'claim_for')->dropDownList($print,['option' => '']); 
?>

问题:

在选择关系时,我会得到表单中所有关系的名称,但在将其保存在gridview中时,我得到的是employee_id,而不是merge_array id。

所以在这里我用这个代码来获取关系名,但我不知道我写的代码是对是错:

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii'grid'SerialColumn'],
        //'id',
        'company.companyname',
        'employee.employeecode',
        'employee.name',
        'claim_for',
        [
           'attribute' => 'claim_for',
           'format' => 'raw',
           'value' => function($model, $key, $index, $grid) {
                $temp = $model->claim_for;
                $si = Employeedetails::find()->where(['id' => $temp])->one();
                return $si['father_name'];// here how to bring merged array relation name
        },  
        ],
        'healthcard_no',
        ['class' => 'yii'grid'ActionColumn'],
    ],
]); ?>

我已经搜索了两天,但没能找到它。如果有人能帮忙,我将不胜感激。

将claimprocess表中的字段创建为claim_for,并将employeedetails的获取值存储在单独的表中。就是这样,希望你会

claimpresscontroller.php

            $commaList = explode('-', $model->claim_for);
            $model->claimer_name = $commaList[1];

employeedetails.php

echo "<option value='".$employee->id. '-' .$employee->name. "'>".$employee-RelationName7."</option>";