updateAll查询无法在cakephp中运行

时间:2013-04-29 09:00:52

标签: jquery cakephp sql-update cakephp-2.0

我尝试使用updateAll命令更新表帖子。但是我得到了一个错误。我有wot表即用户和帖子。我的控制器是,

<?php
App::uses('AppModel', 'Model');
class Post extends AppModel {
public $belongsTo = array(
    'User' => array(
        'className'    => 'User',
        'foreignKey'   => 'user_id',
        'fields'    => "User.id,User.name,User.uname"
    )
);
function updatePost($title,$content,$pid){
    $this->updateAll(
        array('Post.title' => $title,'Post.content'=>$content),
        array('Post.id' => $pid)
    );
}
}

?>

错误讯息是, “错误:SQLSTATE [42000]:语法错误或访问冲突:1064您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'Post 2,Post附近使用正确的语法。content =

模型是作为第1行的业务la'的类

“SQL查询:更新blogposts AS Post LEFT JOIN blogusers AS User ON({{1} }。Post = user_idUser)SET idPost = test_title,titlePost =示例正文WHERE contentPost = 2“; 如何纠正?

2 个答案:

答案 0 :(得分:3)

Try...
$this->updateAll(
        array('Post.title' => "'$title'",'Post.content' => "'$content'"),
        array('Post.id' => $pid)
    );

答案 1 :(得分:1)

首先,您没有包含实际的错误消息?我只能看到一个查询?

但是,我看到一些问题;

  • 看起来你有一个错字; Post.titile似乎是Post.title

  • 的拼写错误
  • CakePHP中的字段应指定为数组,而不是逗号分隔的字符串,所以

        'fields'    => array("User.id", "User.name", "User.uname")
    

但是,请再次显示实际的错误消息和/或您期望的内容以及您的内容

此外,如文档中所述,updateAll()中的字段接受SQL表达式,因此应手动引用。见Model::updateAll()

  

提示   $ fields数组接受SQL表达式。应使用&gt; Sanitize :: escape()手动引用文字值。

因为您似乎正在更新帖子,在我看来您正在寻找Model::save()吗?

请参阅:Saving your data

更新

要使用Model :: save()执行此操作,请将updatePost方法重写为类似的内容;

function updatePost($title,$content,$pid){
    $this->save(
        array(
            'Post' => array(
                'id' => $pid,
                'title' => $title,
                'content'=> $content
            )
        )
    );
}