2014-10-06 66 views
0

我坚持这样的代码:Yii的查询生成器,其中相同的条款

->select ('t1.id_i, t2.status') 
->from ('table1 as t1, table2 as t2')   
->where(array('or', 'id_i'=>$model->id, array('like', 't2.status', '%Beginner%'))) 

这里有我想要的东西

WHERE t1.id_i=$model->id AND/OR t2.status LIKE "Beginner" //AND/OR are optional combination 

我尝试没有结果很多组合。

请帮帮我。 谢谢。

回答

0

我认为这个问题是CDbCommandwhere()方法不使用键值对$conditions阵列,你在这里做支持:'id_i'=>$model->id_e。该绑定需要通过参数$params发生。除此之外,我还建议使用值绑定而不是数组语法的字符串,因为它会使代码更易于阅读。

这里的呼叫修改后的代码,以where()

->where('id_i = :id_e OR t2.status LIKE "%Beginner%"', array(':id_e' => $model->id_e)) 

你可以看到,它更接近最终的SQL,这使得调试更加方便。

如果你决定使用原来的语法,试试这个来代替:

->where(array('or', 'id_i = :id_e', array('like', 't2.status', '%Beginner%')), array(':id_e' = $model->id_e)) 
0

尽量把条款在哪里()方法,在类CDbCommand,其中()的方法指定WHERE部分的查询,第一个参数是查询条件,第二个参数是绑定到查询的参数(name => value)。

->select ('t1.id_i, t2.status') 
->from ('table1 as t1, table2 as t2')   
->where('t1.id_i=:id_i OR t2.status LIKE "%:status%"',array(':id_i' => $model->id,':status' => 'Beginner')) 

更多CDbCommand细节,其中()方法here

+1

部屋,别忘了说明你已经改变了什么,以及为什么。不要忘了堆栈溢出中有许多新手可以从你的经验中学到一两件事,而对你来说显而易见的东西可能不是他们的。 – 2014-10-09 05:36:29