php - Yii 1.16 ORM findAll()
问题描述
我怎样才能在 Yii ORM 中写这个findAll
来CDbCriteria
完成所有Users
模型
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);
}
}
推荐阅读
- gradle - Custom Metadata in Gradle dependency descriptor
- java - WLPs MicroProfile (FaultTolerance) Timeout Implementation does not interrupt threads?
- javascript - 在经典 asp 中下载 zip 文件时,我收到“文件正在被另一个进程错误使用”
- ios - 无效的架构 Xcode 10
- elasticsearch - Elasticseach 多个索引建议
- authentication - 在地址栏中键入时,Vue Router Guards 不会阻止受保护的路由
- qt - Is there a way to simplify the qresource file descriptors?
- excel - [Excel]添加了来自不同工作簿的工作表,仍然出现“更新值”对话框
- python - python:AttributeError: 'GameStats' 对象没有属性 'click_first'
- asp.net-core - .Net Core Web API 项目中的 Hangfire 仪表板