Сведения о вопросе

FELL

17:25, 11th August, 2020

Теги

Yii    

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

Просмотров: 330   Ответов: 2

Есть 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)



  Сведения об ответе

DINO

18:43, 17th August, 2020

Если подзапрос вернет много записей, то наиболее быстрым будет следующее:

$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));


  Сведения об ответе

9090

08:07, 10th August, 2020

Спасибо, я примерно так уже и сделал:

$criteria = new CDbCriteria();
$criteria->addNotInCondition('id', $coursesIds);
$unsubscribedCourses = new CActiveDataProvider('Courses', array('criteria' => $criteria));


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться