我尝试使用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查询:更新blog
。posts
AS Post
LEFT JOIN blog
。users
AS User
ON({{1} }。Post
= user_id
。User
)SET id
。Post
= test_title,title
。Post
=示例正文WHERE content
。Post
= 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
)
)
);
}