2014-05-11 1 views
0

쿼리는 I는 SQL 쿼리 YII 같은 코드를 만들 수있는 가장 좋은 방법은 무엇YII 1.x에서, 쿼리 DB 선택

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 1.x를 사용하여이 쿼리를 어떻게 수행 할 수 있습니까?

+0

쿼리 결과와 함께 무엇을 할 것입니까? – jagsler

+0

'dropDownList'의'CActiveForm' 위젯에서 @jagsler 사용 – user1954544

답변

0

가정 :

  • tbl_role하지만 나는 이것이 당신이 얻을 수있는 가장 가까운 생각
  • tbl_user_role이
  • tbl_user_role_request이 3 개 별도의 쿼리를 할 것 UserRoleRequest

주의라는 이름의 모델을 가지고 UserRole 라는 이름의 모델이있는 모델이라는 역할이있다 총 난장판을 만들지 않고.

<?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); 
0

나는 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); 
+0

쿼리 빌더, 그렇지만 doctrine2처럼 만들 수 있습니까? -> leftJoin(), -> andWhere() 등으로 – user1954544