Я пытаюсь показать поля из другой модели в сетке, но не могу заставить ее работать.
У меня есть 2 таблицы: Клиенты а также посещаемость и мне нужно обеспечить только сегодняшнюю посещаемость для каждого клиента.
От посещаемости я пытаюсь получить на поле Летопись посещаемости.
В сетке я пытаюсь получить функцию, но не работает.
$gridColumns = [
[
'label' => 'Doctor',
'value' => function ($model, $index, $dataColumn) {
return $model->attendance->doctor;
},
],
...
];
Закрытие для «значения»:
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 поля, которые я хочу получить из таблицы посещаемости (Dropin, Doctor and 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');
},
],
Функция 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
В случае, если вы хотите взглянуть еще лучше помочь …..
(Это бесплатный простой проект, который я помогаю развивать для благотворительности)