taral
(Pasechnikbs)
September 21, 2012, 1:21pm
1
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
antares
(Antares Mips)
September 21, 2012, 1:36pm
2
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();
taral
(Pasechnikbs)
September 21, 2012, 2:08pm
3
Sory. My question was "why yii developers did this different work with where and join"
antares
(Antares Mips)
September 21, 2012, 2:24pm
4
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
taral
(Pasechnikbs)
September 21, 2012, 3:57pm
5
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