我有这样的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执行此查询?
答案 0 :(得分:0)
我会使用CDbCommand
:http://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)
假设:
请注意,这将进行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);