gpt4 book ai didi

sql - 在 yii 中使用 CActiveDataProvider 获取数据

转载 作者:行者123 更新时间:2023-12-04 18:24:10 24 4
gpt4 key购买 nike

我有 3 个表,标准关系多对多Users(id,...) -> Users_Has_Courses(Users_id, Courses_id) -> Courses(id,...)

类(class)模型有下一个关系

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

用户模型有下一个关系

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

请告诉我如何获得类(class)列表,其中具有指定“id”的用户尚未订阅 CActiveDataProvider ?换句话说,我需要这个普通 SQL 查询的模拟

select * from Courses where id not in (select Courses_id from users_has_courses where Users_id = 2)

感谢帮助

最佳答案

尝试使用参数化的命名范围来封装查询,而不是常规的“关系”。在您的类(class)模型中,添加此范围函数以获取用户不在的所有类(class)的列表:

public function userNotIn($user_id)
{
$criteria=new CDbCriteria();
$criteria->condition .= 't.id NOT IN (SELECT users_has_courses.Courses_id FROM users_has_courses WHERE users_has_courses.Users_id = :userid)';
$criteria->params[':userid'] = $user_id;
$this->getDbCriteria()->mergeWith($criteria);
return $this;
}

那么你应该可以这样做:

$coursesNotIn=new CActiveDataProvider(Courses::model()->userNotIn($user->id));

此代码完全未经测试,但原则上应该可以工作。当我有一个复杂的查询但我仍然想使用 AR 功能时,我经常做这种事情,比如 CActiveDataProvider。在此处阅读有关“命名范围”的更多信息:

http://www.yiiframework.com/doc/guide/1.1/en/database.ar#parameterized-named-scopes

祝你好运!

关于sql - 在 yii 中使用 CActiveDataProvider 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4367428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com