Получение данных с помощью CActiveDataProvider в yii?

Есть 3 таблицы, стандартная связь многие-ко-многим.

Users(id,...) -> Users_Has_Courses(Users_id, Courses_id) -> Courses(id,...)



Отношение в модели Courses



'users' => array(self::MANY_MANY, 'Users', 'users_has_courses(Courses_id, Users_id)')



в модели Users



'courses' => array(self::MANY_MANY, 'Courses', 'users_has_courses(Users_id, Courses_id)'),



Подскажите, как получить список курсов, на которые не подписан пользователь с указанным id, т.е. аналог обычного запроса



select * from Courses where id not in (select Courses_id from users_has_courses where Users_id = 2)
  • Вопрос задан
  • 13112 просмотров
Пригласить эксперта
Ответы на вопрос 2
calg0n
@calg0n
Если подзапрос вернет много записей, то наиболее быстрым будет следующее:

$courses = Courses::model()->findAllBySql(
"SELECT * FROM Courses WHERE id NOT IN (SELECT courses_id FROM users_has_courses WHERE users_id=:u)",
array(':u'=>2));
Ответ написан
Комментировать
Sirix
@Sirix Автор вопроса
Спасибо, я примерно так уже и сделал:

$criteria = new CDbCriteria();
$criteria->addNotInCondition('id', $coursesIds);
$unsubscribedCourses = new CActiveDataProvider('Courses', array('criteria' => $criteria));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы