1

私のアプリは他のモデルで動作しますが、保存しようとすると、何らかの理由で「投票」モデルが db テーブルに接続できません。私はこれを数日間行ってきましたが、すべてを試したような気がします!

ここに、モデルを呼び出すコントローラー VoteController.php があります (読みやすいように編集されています)。

<?php

class VoteController extends AppController {

    var $uses = array('Track', 'Vote');

    function upvote() {
        $this->autoRender = false;
        $User = $this->auth();
        if ($User) {
            $track_id = @$this->params['id'];
            $this->Vote->upvote($track_id, $User['User']['id']);
        }
    }

}

?>

ここにモデルのvote.phpがあります:

<?php

App::uses('AppModel', 'Model');

class Vote extends AppModel {

    var $name = 'Vote';

    function upvote($id, $user_id) {
        $VoteObject = array('Vote' => array(
                'u_id' => $user_id,
                't_id' => $id,
                'upvote' => 1,
                'downvote' => 0
                ));
        $this->save($VoteObject);
    }

}

?>

そしてもちろん、私のデータベースには、列 id、u_id、t_id、upvote、および downvote を持つテーブル「votes」があります。すべてが実行された後、次のエラーが発生します。

データベース テーブルがありません

エラー: モデル Vote のテーブルの投票がデータソースのデフォルトで見つかりませんでした。

tmp のファイルを削除したり、すべての名前を変更したり、クエリを出力したりしてみましたが、どこにも行けないようです。どんな助けでも大歓迎です!

4

3 に答える 3

2

この行を削除してみてください

App::uses('AppModel', 'Model');

これをクラスに追加します

var $useTable = 'votes';

正しい名前を使用しようとしているようです。それは問題ではないかもしれません。データ ソースが正しく設定されていることを確認できますか。

于 2012-07-11T14:43:23.470 に答える
0

CakePhp Conventions によると、コントローラは最後に Controller という単語で複数形にする必要があります。また、コントローラに VotesController.php という名前を付けていることを確認してください。

 <?php
   class VotesController extends AppController {

}

?>

使用しているモデルで:

 var $name = 'Vote';

var $name = 'Votes'; を使用する必要があります。(複数) モデル名が Vote.php (単数) であることを確認します。

また、次のことを行う必要があります。

function upvote($id, $user_id) {
    $VoteObject = array('Vote' => array(
            'u_id' => $user_id,
            't_id' => $id,
            'upvote' => 1,
            'downvote' => 0
            ));
    $this->save($VoteObject);
}

モデルではなくコントローラー内。

于 2012-07-11T18:25:29.717 に答える