yii2 用来自另一个 table 的记录填充网格

yii2 populate grid with record from another table

我正在尝试在网格中显示来自另一个模型的字段,但无法正常工作。

我有 2 个表:CustomersAttendance,我只需要为每个客户带来今天的出勤率。

从出勤率来看,我正在尝试获得该字段attendance.doctor

在网格中,我正在尝试获取一个函数,但无法正常工作。

$gridColumns = [
    [
        'label' => 'Doctor',
        'value' => function ($model, $index, $dataColumn) {
            return $model->attendance->doctor;
        },
    ],

    ...
];

"value" 的闭包是:

function($model, $key, $index, $widget) {
  return $model->attendance->doctor->name;
}

或者您可以这样做:

"value" => "attendance.doctor.name"

文档:http://www.yiiframework.com/doc-2.0/guide-output-data-widgets.html#column-classes

我花了几个小时,但我发现这个方法可能不是最好的,但很有效。

在视图中,我使用的是 kartik 网格,但与默认网格的工作方式相同。

我想从出勤表中获得 3 个字段 table(Dropin、Doctor 和 Lawyer)。

        [
    'class' => 'kartik\grid\BooleanColumn',
    'vAlign' => 'middle',
    'label' => 'Dropin',
    'value' => function($model, $index, $dataColumn) {
                    return $model->getAttendances('Dropin');
                },
    ],                            
    [
    'class' => 'kartik\grid\BooleanColumn',
    'vAlign' => 'middle',
    'label' => 'Doctor',
    'value' => function($model, $index, $dataColumn) {
                    return $model->getAttendances('Doctor');
                },
    ],                            
    [
    'class' => 'kartik\grid\BooleanColumn',
    'vAlign' => 'middle',
    'label' => 'Lawyer',
    'value' => function($model, $index, $dataColumn) {
                    return $model->getAttendances('Lawyer');
                },
    ],

当前模型(Customers)中定义的getAttendences函数

    public function getAttendances($field_to_search)
{       
    $model =  Attendance::find()->where(['CustomersID'=>$this->ID])->one();
    if (! empty($model)) {
       //design my GridView
        $value = $model->$field_to_search;
    }
    else
    {
        $value = 0;
    }
    return $value;
}

我正在发布项目:

https://github.com/open-ecommerce/oe-dropin

万一你想看看更好的帮助......

(这是一个免费的简单项目,我正在帮助为慈善机构开发)