1

この問題に関連する 2 つのテーブル、posts と postratings があります。モデルには次の関係があります。

Post hasmany Postrating
Postrating belongsto Post

テーブル スキーマは次のとおりです。

テーブルポスト
id | user_id | post | rating_post | ratings

テーブル評価
id | user_id | post_id | rating_post

アイデアは、投稿が存在する場合、ユーザーがそれを評価できるということです。評価により、テーブルratings新しいエントリを取得し、テーブルは ID が post_id の投稿エントリの更新postsを取得します。

私の問題は、両方のテーブルに新しいエントリしか保存できないことです。で試してみましたsaveAssociated()が、結果は を使用した場合と同じsaveAll()です。

誰かが私を助けてくれたら、とても感謝しています。もちろん、必要に応じてさらに情報を提供します。

前もって感謝します

編集: //

PostratingsController のメソッド add は次のとおりです。

public function add($id = null) {


$this->loadModel('Post');

if (!$this->Post->exists($id)) {
    throw new NotFoundException(__('Invalid post'));
    }
if ($this->request->is('post')) {
    $this->Postrating->create();
    if ($this->Postrating->save($this->request->data)) {
        if ($this->Postrating->save($this->request->data)) {
            $this->Postrating->Post->id = $id;
            $this->Postrating->Post->save($this->request->data);
            $this->Session->setFlash(__('The postrating has been saved'));
            $this->redirect(array('action' => 'index'));
        }
    } else {
        $this->Session->setFlash(__('The postrating could not be saved.'));
    }
} else {
    $options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id));
    $this->request->data = $this->Post->find('first', $options);
}

$post = $this->Postrating->Post->find('list');
$users = $this->Postrating->User->find('list');
$this->set(compact('posts', 'users'));

$options = array('conditions' => array('Post.' . $this->Post->primaryKey => $id));
$this->set('posts', $this->Post->find('first', $options));

}

4

1 に答える 1

0

同時ということですか?あなたratingが数字 (例えば 1 から 5 の間) で、「合計」評価を投稿テーブルに保存したいとします。私は(擬似コード)のようなことをします

if($this->Rating->saveRating($user_id, $post_id, $rating)) {
    $this->Rating->Post->id = $post_id; // update instead of insert
    $this->Rating->Post->updateRating($rating);
}

例えば:

  • ユーザー評価 評価 5 の投稿
  • ユーザーがこの投稿を既に評価しているかどうかを確認する
  • 評価を保存
  • Post テーブルを新しい評価で更新します ( existing_rating + new_rating)
于 2013-03-02T13:11:43.113 に答える