Difference Work Where And Join On Cdbcommand

Why

Yii::app()->db->createCommand()->from(‘table1 t’)->where(‘id=1’)->where(‘id=2’)->queryAll();

return

>>> SELECT * FROM table1 t WHERE id=2

but

Yii::app()->db->createCommand()->from(‘table1 t’)->join(‘table2 t2’, ‘t2.id=t.id’)->join(‘table3 t3’, ‘t3.id=t.id’)->queryAll();

return

>>> SELECT * FROM table1 t JOIN table2 t2 ON t2.id=t.id JOIN table3 t3 ON t3.id=t.id

Because




public function where($conditions, $params=array()) 

{ 

    $this->_query['where']=$this->processConditions($conditions); 

    foreach($params as $name=>$value) 

        $this->params[$name]=$value; 

    return $this; 

}



you make call


Yii::app()->db->createCommand()->from('table1 t')->where('id = :id AND/OR id = :id2',array(':id'=>1,':id2'=>2))->->queryAll(); 

Sory. My question was "why yii developers did this different work with where and join"

you call first time


Yii::app()->db->createCommand()->from('table1 t')->where('id=1')

and got sql query


SELECT * FROM table1 t WHERE id=1

you call second time


Yii::app()->db->createCommand()->from('table1 t')->where('id=1')->where('id=2')

what do must be in query?


SELECT * FROM table1 t WHERE id=1 AND id = 1

or


SELECT * FROM table1 t WHERE id=1 OR id = 1

in Kohana and CodeIgniter its solved

add_where, or_where.


Yii::app()->db->createCommand()->from('table1 t')->where('id=1')->where('id=2')

return


SELECT * FROM table1 t WHERE id=1 AND id = 1


Yii::app()->db->createCommand()->from('table1 t')->where('id=1')->or_where('id=2')

return


SELECT * FROM table1 t WHERE id=1 OR id = 1


Yii::app()->db->createCommand()->from('table1 t')->where('id=1')->and_where('id=2')

return


SELECT * FROM table1 t WHERE id=1 AND id = 1

And Kohana have methods begin_and_where, end_where, begin_or_where

if your need query like this SELECT * FROM table1 t WHERE id=1 AND (id = 2 OR id=3)

But you are right. In simple Cdbcommand code its a problem