【问题标题】:how to use Yii ActiveRecord relations?如何使用 Yii ActiveRecord 关系?
【发布时间】:2023-04-11 01:43:01
【问题描述】:

我怎么能像这样的 sql 搜索

select user.user_id,count(distinct user.user_id,user_lesson_read.lesson_id) as counter 
FROM 
user 
inner join 
user_lesson_read 
ON (user.user_id =user_lesson_read.user_id)
GROUP BY user_lesson_read.user_id
having counter >=3

在 AR 中? 这是数据库结构:

User
--------------------
user_id     |
1           |
--------------------

LessonRead
-------------------------------------
user_id |   lesson_id   | section_id
-------------------------------------
1       |   2           |   A
-------------------------------------
1       |   2           |   B
-------------------------------------
1       |   3           |   A
-------------------------------------
1       |   4           |   A
-------------------------------------

用户 1 有 3 节课记录(第 2、3、4 课)
我尝试了一些类似的东西

'userLessonRead'=>array(
            'select'=>'count(distinct t.user_id,t.lesson_id) as b',
            //'condition'=>'',
        ),

我会得到一个 CDbException,并且 sql 不正确:

t.lesson_id) as b, // one parenthesis here

有人帮忙吗?谢谢!

【问题讨论】:

    标签: php activerecord yii


    【解决方案1】:

    试试这个,

    在用户模型中,

    public function relations()
    {
    
            return array(
                        "lessonread"  => array(self::HAS_MANY,"LessonRead","user_id")
            );
    }
    

    在搜索()中,

    $criteria->with = array("user_lesson_read")
    $criteria->group = 'user_lesson_read.user_id';
    $criteria->having = 'count(distinct t.user_id,t.lesson_id) > 3';
    

    在 LessonRead 模型中,

    public function relations()
    {
    
            return array(
                        "user"  => array(self::BELONGS_TO,"User","user_id")
            );
    }
    

    【讨论】:

    • 谢谢!好像我误解了 with() 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多