简体   繁体   English

Yii 1.16 ORM findAll()

[英]Yii 1.16 ORM findAll()

How can I write this in a Yii ORM findAll using CDbCriteria to fin all Users model我如何在 Yii ORM findAll中使用CDbCriteria来查找所有Users model

SELECT DISTINCT u.id, u.slug, IFNULL(MIN(m.id), 0) FROM tbl_users u 
            INNER JOIN tbl_status s ON (s.users_id = u.id AND s.accept > 0) 
            INNER JOIN tbl_message m ON (m.owner_id = s.receiver AND m.users_id = s.users_id) 
            WHERE u.free = 0 AND u.es_index_time <> 0 AND 
            u.paid = 1 AND u.withdrawed = 0 AND ( 
            NOT EXISTS (SELECT 1 FROM tbl_users_prepay up WHERE up.users_id = u.id) OR 
            EXISTS (SELECT 1 FROM tbl_users_prepay up WHERE up.user_redirect_id = u.id)
            )
            GROUP BY u.id
            LIMIT 6;
/**
 * Class User - for more details:
 * @see     https://www.yiiframework.com/doc/api/1.1/CDbCriteria
 * or
 * @see     http://www.bsourcecode.com/2013/06/cdbcriteria-in-yii/
 */
class User extends CActiveRecord
{
    // ... user model methods

    public function myCustomMethod()
    {
        $criteria = new CDbCriteria();
        $criteria->alias = 'u';
        $criteria->distinct = true;
        // INNER JOIN
        $criteria->join = 'INNER JOIN tbl_status s ON (s.users_id = u.id AND s.accept > 0)';
        $criteria->join = 'INNER JOIN tbl_message m ON (m.owner_id = s.receiver AND m.users_id = s.users_id)';
        // condition
        $criteria->condition = 'u.free = 0 AND u.es_index_time <> 0 AND
            u.paid = 1 AND u.withdrawed = 0 AND (
                NOT EXISTS (SELECT 1 FROM tbl_users_prepay up WHERE up.users_id = u.id) OR
                EXISTS (SELECT 1 FROM tbl_users_prepay up WHERE up.user_redirect_id = u.id)
            )
        ';
        $criteria->group = 'u.id';
        $criteria->limit = '6';

        return self::model()->findAll($criteria);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM