0

updateAll コマンドを使用して、テーブルの投稿を更新しようとしています。しかし、私はエラーが発生しました。ユーザーと投稿というテーブルがあります。私のコントローラーは、

<?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)
    );
}
}

?>

エラー メッセージは次のとおりです。Post. content=

モデルは、1 行目のビジネスとして座っているクラスです。」

"SQL クエリ: UPDATE blog. postsAS PostLEFT JOIN blog. usersAS UserON ( Post. user_id= User. id) SET Post. title= test_title, Post. content= サンプル本文 WHERE Post. id= 2 "; それを修正する方法?

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 に答える