我可以在查询构建器中使用join()和where()以及update()吗?
$q = Yii::app()->db->createCommand()
->update('table',array('a'=>0))
->join('join statement')
->where('where statement')
->query();
我得到这样的错误
Call to a member function join() on a non-object in ...
编辑: 如果我测试
$q = Yii::app()->db->createCommand()
->update('table',array('a'=>0));
die($q);
我看到结果0所以
我认为update(),执行sql语句所以我不能使用join()和where()。
答案 0 :(得分:1)
加入Yii不是一种方法,你不要这样使用它:
->join('tbl_profile p', 'u.id=p.user_id')
但是像这样:
->join = 'tbl_profile p';
答案 1 :(得分:1)
我正在寻找同一个问题的答案。当我找不到时,我检查了源代码。
Yii的CDBCommand :: update方法忽略了您之前可能添加到CDBCommand的任何联接(请参阅此处的来源:https://github.com/yiisoft/yii/blob/1.1.14/framework/db/CDbCommand.php#L1265)。
因此,简单的答案是您无法在CDBCommand上的更新方法中进行连接。这将转向CDBCriteria,或者如果真的不是一个选项,则在本机SQL中编写UPDATE查询并使用CDBCommand执行它。类似的东西:
$command = $this->dbConnection->createCommand('[Your native SQL UPDATE query]');
$command->execute();
答案 2 :(得分:0)
这是一种格式
$user = Yii::app()->db->createCommand()
->update('tbl_user u',array('a'=>0))
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();
可能你错过了加入的条件。
或使用cdbcriteria