2014-02-06 41 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