2014-02-06 70 views
-1

我在做什麼看起來像一個簡單的查詢基本上是做對competition_id一個WHERE子句和prize_type的Yii - 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

任何人都可以解釋爲什麼這將是downvoted - 答案被接受後一天?它確實在某種程度上破壞了社區,並沒有給出任何理由。 – 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