Yii Условие с несколькими AND и OR - приоритет оператора - PullRequest
1 голос
/ 24 октября 2011

Что нужно изменить здесь, чтобы получить рабочий оператор выбора?

ОБНОВЛЕНО в отношении ответа Джона.

<?php echo $form->dropDownList($model, 'GroupId', GxHtml::listDataEx(Group::model()
               ->findAll(array(
                    'condition'=>'SC=:stat AND Pri=:pri AND Type=:typ OR Type=:typ2 OR Type=:typ3', 
                    'params'=>array(':stat'=>'A', ':pri'=>'Y', ':typ'=>'A', ':typ2'=>'B', ':typ3'=>'C')),
                    'GroupId', 'Name')); 
?>

Что дает:

system.db.CDbCommand.query
    (SELECT * FROM `group` `t` 
    WHERE SC=:stat AND Pri=:pri AND Type!=:typ 
    OR Type!=:typ2 OR Type!=:typ3. 
    Bound with :stat='A', :pri='Y', :typ='A', :typ2='B', :typ3='C')

Проблема здесь не в том, что все учитывается.Можно ли как-нибудь добавить приоритет оператора в код Yii?

Ответы [ 2 ]

1 голос
/ 24 октября 2011

Возможно, вы неправильно использовали оператор.

Учтите, что если typ == 'A' и typ2 == 'B', то

type != 'A' OR type != 'B'

будет true независимо от того, что typeявляется.Возможно, вы хотели вместо этого:

'condition'=>'SC=:stat AND Pri=:pri AND Type!=:typ AND Type!=:typ2 AND Type!=:typ3', 

Кроме этого, вы можете просто добавить паренсы, чтобы исправить приоритет, если это проблема.

1 голос
/ 24 октября 2011

Я думаю, вы можете просто использовать круглые скобки, чтобы получить нужный вам приоритет оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...