在CakePHP中缺少数据库表,我遵循了约定并尝试了一切

时间:2012-07-11 14:25:02

标签: php database cakephp model

我的应用程序可以与其他模型一起使用,但由于某种原因,当我尝试保存时,“投票”模型无法连接到数据库表。我已经在这里待了几天,我觉得我已经尝试了一切!

这是我的控制器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。 一切都执行后,我收到此错误:

缺少数据库表

错误:在数据源默认值中找不到模型投票的表投票。

我已经尝试删除tmp中的文件,以及重命名所有内容,打印查询等等,而我似乎无法随时随地获取。任何帮助将不胜感激!

3 个答案:

答案 0 :(得分:2)

尝试删除此行

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

并将其添加到班级

var $useTable = 'votes';

看起来它正在尝试使用正确的名称。所以这可能不是问题。您能否验证您的数据源是否已正确设置。

答案 1 :(得分:1)

尝试清除tmp / cache目录。 为我固定。

答案 2 :(得分:0)

根据CakePhp约定,你的控制器最后应该用Controller这个词复数,同时确保你的控制器命名为VotesController.php

 <?php
   class VotesController extends AppController {

}

?>

在您正在使用的模型上:

 var $name = 'Vote';

你应该使用:var $ name ='Votes'; (Plural)并确保您的型号名称为Vote.php(Singular)。

应该

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

不在模型中。