1

Пытаюсь разобраться с AR запросами в Yii 1.x..

Есть модель User [id, name]

Каждый User имеет несколько моделей Task [id, user_id] (через HAS_MANY)

При этом есть еще и модель Project [id, name], которая связана с Task через MANY_MANY (таблица tasks_projects [task_id, project_id]).

Задача - выбрать всех User, которым стоят задачи на проекты projectIds[].

Всю голову сломал, не могу понять, как составить корректно запрос..

$criteria = new CDbCriteria;

if (isset($_data['projectIds']) && count($_data['projectIds']) > 0) {
    $criteria->with = array('tasks', 'tasks.projects'=>array('alias'=>'projects'));
    $criteria->together = true;
    $criteria->addInCondition('projects.project_id', $_data['projectIds']);
}

User::model()->findAll($criteria);

В итоге, получаю ошибку о неверной колонке projects.project_id

Что я делаю не так?

Nofate
  • 34,603
Maksim
  • 11
  • Пробовали сменить project_id на просто id? В ORM отсутствует понятие "таблица связей", на уровне манипулирования объектами ее не видно. – etki Jun 28 '15 at 03:38
  • да, пробовал, не помогло – Maksim Jun 28 '15 at 06:46

1 Answers1

1

Должно помочь, если связи в моделях правильно прописаны

$criteria = new CDbCriteria;

if (isset($_data['projectIds']) && count($_data['projectIds']) > 0) {
    $criteria->with = array('tasks', 'tasks.projects'=>array('alias'=>'projects'));
    $criteria->together = true;
    $criteria->addInCondition('tasks.projects.project_id', $_data['projectIds']);
}

User::model()->findAll($criteria);