使用join()和where()和update()

时间:2011-11-18 10:06:19

标签: yii

我可以在查询构建器中使用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()。

3 个答案:

答案 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