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 号线的业务类”

“SQL 查询:UPDATE .AS LEFT JOIN .AS ON ( blog. = . ) SETpostsPostblogusersUserPostuser_idUseridPosttitle = test_title, Post.content示例正文 WHERE . = 2" Post; id如何纠正它?

4

2 回答 2

2
Try...
$this->updateAll(
        array('Post.title' => "'$title'",'Post.content' => "'$content'"),
        array('Post.id' => $pid)
    );
于 2014-05-12T05:55:35.413 回答
1

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

但是,我确实看到了一些问题;

  • 看起来你有一个错字;Post.titile看起来像一个错字Post.title

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

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

但同样,请显示实际的错误消息和/或您所期望的以及您得到的

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

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

因为您似乎正在更新单个帖子,所以在我看来您正在寻找的Model::save()是?

请参阅:保存数据

更新

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

function updatePost($title,$content,$pid){
    $this->save(
        array(
            'Post' => array(
                'id' => $pid,
                'title' => $title,
                'content'=> $content
            )
        )
    );
}
于 2013-04-29T09:18:45.933 回答