2014-02-06 5 views
-1

Я делаю то, что выглядит как простой запрос в основном делает WHERE условие на competition_id и prize_typeYii - CDbCriteria неожиданные результаты

$criteria = new CDbCriteria; 
    $criteria->select = 't.*, myuser.firstname, myuser.surname'; 
    $criteria->join ='LEFT JOIN myuser ON myuser.user_id = t.user_id'; 
    $criteria->condition = 't.competition_id = :competition_id'; 
    $criteria->condition = 't.prize_type = :prize_type'; 
    $criteria->params = array(":competition_id" => $competition_id); 
    $criteria->params = array(":prize_type" => "1"); 

    $winners = CompetitionWinners::model()->findAll($criteria); 

Можно ли предположить, что случилось с моим кодом ... Я ожидаю около 4 рядов .. но получить более 600?

Я просто хочу сделать ...

WHERE competition_id = 123 AND prize_type = 1; 

Есть простая функция, чтобы просто вывести SQL-запрос для этой единственной CDbCriteria «событие»?

+2

http://stackoverflow.com/questions/10629728/yii-how-to-print-sql-used-by- findall и http://stackoverflow.com/questions/4435886/yii-model-to-array/4577768#4577768 могут помочь вам отлаживать запросы – Pentium10

+0

Может ли кто-нибудь объяснить, почему это было бы ниспроверено - через день после принятия ответа ? Это немного разрушает сообщество, когда это происходит, и ни одна причина не дается. – Zabs

ответ

1

попробовать это

$criteria = new CDbCriteria; 
    $criteria->select = 't.*, myuser.firstname, myuser.surname'; 
    $criteria->join ='LEFT JOIN myuser ON myuser.user_id = t.user_id'; 
    $criteria->condition = 't.competition_id = :competition_id AND t.prize_type = :prize_type'; 
    $criteria->params = array(":competition_id" => $competition_id,":prize_type" => "1"); 
    $winners = CompetitionWinners::model()->findAll($criteria); 
+0

отлично! есть ли способ получить Yii для вывода этих критериев в виде строки SQL для целей отладки? Я могу получить Yii для вывода всего, кроме его сложного, когда на странице так много других запросов. – Zabs

+0

рад, что это помогло. пожалуйста, примите его в качестве ответа, если он вам помог :) –

+0

hehehhe .... Я боюсь, что я не знаю другого способа. Я также использую тот же хитрый способ найти выполненные запросы :) –

1

Или вы могли бы использовать CDbCriteria::addCondition()

$criteria->addCondition('t.competition_id = :competition_id') 
     ->addCondition('t.prize_type = :prize_type'); 
+0

+1 для ссылки :) – Zabs

Смежные вопросы