Yii 1.x,在查询DB选择中查询

时间:2014-05-11 12:11:17

标签: php yii phpactiverecord

我有这样的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 1.x执行此查询?

2 个答案:

答案 0 :(得分:0)

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

使用以下代码获取数据

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

然后您可以使用此数据集创建dropDownList

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

答案 1 :(得分:0)

假设:

  • 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);