Проблема возникла при попытке создать связь с помощью viaTable
Вот, имеются такие таблицы, задействованные поля я привел
mdl_backend_user таблица учетных записей слушателей
id
mdl_user_id
mdl_backend_user_requests таблица заявок слушателей на обучение
id
user_id
mdl_backend_module_entries таблица для того чтобы соотносить id заявок и модули на которые записались пользователи (одной заявке может соответствовать много модулей)
request_id
module_id
mdl_user_lastaccess (дефолтная таблица cms moodle, userid соответствует mdl_user_id из таблицы mdl_backend_user. courseid соответствует module_id из таблицы mdl_backend_module_entries)
userid
courseidt
timeaccess
соответственно мне надо вытянуть все значения timeaccess из mdl_user_lastaccess которые соответствуют определенному юзеру и модулям на которые он записался.
и получить максимальное ззначение (иными словами last_activity по всей заявке а не по каждому модулю)
Устанавливаю связи в модели Request (таблица mdl_backend_user_requests):
Код: Выделить всё
public function getAccount(){ //устанавливаю связь с таблицей mdl_backend_user
return $this->hasOne(Account::className(), ['id' => 'user_id']);
}
public function getLastActivity(){ //устанавливаю связь с таблицей mdl_user_lastaccess через таблицу mdl_backend_module_entries
return $this->hasMany(MdlUserLastaccess::className(), ['courseid' => 'module_id', 'userid' => $this->account->mdl_user_id])
->viaTable('mdl_backend_module_entries',['request_id' => 'id']);
}
Код: Выделить всё
[
'attribute' => 'lastActivity',
'value' => function($model) {
return $model->getLastActivity()->one()->timeaccess;
},
],
PHP Notice – yii\base\ErrorException
Undefined offset: 145
Когда меняю в модели геттер, убираю условие 'userid' => $this->account->mdl_user_id
то все работает, выводит в gridview значение timeaccess, но мне надо именно с привязкой к слушателю.
Код: Выделить всё
public function getLastActivity(){ //устанавливаю связь с таблицей mdl_user_lastaccess через таблицу mdl_backend_module_entries
return $this->hasMany(MdlUserLastaccess::className(), ['courseid' => 'module_id'])
->viaTable('mdl_backend_module_entries',['request_id' => 'id']);
}