Belongs(id, employee_id - ссылка на анкету сотрудников, work_status, company_id, department_id, position_id,...) - здесь хранятся должности сотрудников в компании, связь 1:M, т.е у одного сотрудника может быть несколько должностей , work_status - показывает сотрудник работает или уволен.
В сессии пользователя хранится список(массив) доступных ему department_id и каждый запрос сотрудников по отделам.
Код: Выделить всё
'query' => Employee::find()
->alias('employee')
->select('employee.id, employee.dob, employee.fullname,.......,
company.name AS company_name,
department.name as department_name,
position.name as position_name, phone.num as tel, email.email as emails')
->andWhere(['employee.status' => Employee::ACTIVE_STATUS])
->joinWith(['belongs' => function ($q) {
return $q->joinWith(['company', 'department', 'position'], true, 'INNER JOIN');
}], true, 'LEFT JOIN')
->andWhere(['belongs.work_status' => Belongs::WORKING_STATUS])
->andFilterWhere(['like', 'LOWER(employee.fullname)', $qn])
->andFilterWhere(['belongs.department_id' => isset($filter_param['department']) && $filter_param['department'] !='' ? (int) $filter_param['department'] : null])
->joinWith(['phone_list'], true, 'LEFT JOIN')
->joinWith(['email_list'], true, 'LEFT JOIN')
->groupBy('employee.id')
->asArray(),
Код: Выделить всё
public function getBelongs()
{
return $this->hasMany(Belongs::className(), ['employee_id' => 'id'])
->alias('belongs')
->andOnCondition(['belongs.department_id' => Yii::$app->session->get('dep_ids')])
->indexBy('id');
}
Как можно ускорить запрос? бд кстати Mysql