Yii 1.x,查询DB选择


Yii 1.x, query in query DB selection

我有这样的sql查询

SELECT * FROM tbl_role WHERE 
tbl_role.id NOT IN (
     SELECT tbl_user_role.roleID FROM tbl_user_role 
     WHERE tbl_user_role.userID = 35
)
AND
tbl_role.id NOT IN (
     SELECT tbl_user_role_request.roleID FROM tbl_user_role_request 
     WHERE tbl_user_role_request.userID = 35 AND tbl_user_role_request.dateEnd IS NULL)

用类似yii的代码制作它的最佳解决方案是什么?我如何使用Yii进行此查询?x ?

假设:

  • tbl_role有一个名为Role的模型
  • tbl_user_role有一个名为UserRole的模型
  • tbl_user_role_request有一个模型名为UserRoleRequest

注意,这将做3个独立的查询,但我相信这是最接近的,你可以不创建一个完全混乱。

<?php
$userId = 35;
$roles = UserRole::findAllByCondition(array('userId' => $userId));
$roleIds = array_values(CHtml::listData($roles, 'roleId', 'roleId');
$roleRequests = UserRoleRequest::findAllByCondition(array('userId'=>$userId, 'dateEnd'=>null));
$roleRequestIds = array_values(CHtml::listData($roleRequest, 'roleId', 'roleId'));
$criteria = new CDbCriteria();
$criteria->addNotInCondition('id', $roleIds);
$criteria->addNotInCondition('id', $roleRequestIds);
$roles = Role::findAll($criteria);

我将使用CDbCommand: http://www.yiiframework.com/doc/api/1.1/CDbCommand#queryAll-detail

使用以下代码获取数据

$data = Yii::app()->db->createCommand('sql query')->queryAll;

然后你可以使用这个数据集来创建下拉列表

$list = CHtml::listData($data, 'value field', 'text field');
echo $form->dropDownList($model, 'attribute', $list);