CakePHP中缺少数据库表,I';我遵守惯例,什么都试过了

CakePHP中缺少数据库表,I';我遵守惯例,什么都试过了,php,database,cakephp,model,Php,Database,Cakephp,Model,我的应用程序可以与其他模型一起使用,但由于某些原因,当我尝试保存到db表时,“投票”模型无法连接到db表。我已经做了几天了,我觉得我什么都试过了 下面是我的控制器VoteController.php,它调用模型(为了可读性而向下编辑): 下面是model vote.php: <?php App::uses('AppModel', 'Model'); class Vote extends AppModel { var $name = 'Vote'; functio

我的应用程序可以与其他模型一起使用,但由于某些原因,当我尝试保存到db表时,“投票”模型无法连接到db表。我已经做了几天了,我觉得我什么都试过了

下面是我的控制器VoteController.php,它调用模型(为了可读性而向下编辑):


下面是model 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\u id、t\u id、upvote和downvote列。 在执行所有操作后,我得到以下错误:

缺少数据库表

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

我尝试过删除tmp中的文件,以及重命名所有内容、打印查询等,但似乎什么都做不到。任何帮助都将不胜感激

尝试删除此行

App::uses('AppModel', 'Model');
并将其添加到类中

var $useTable = 'votes';

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

根据CakePhp惯例,您的控制器最后应该与controller一词复数,还要确保将控制器命名为VotesController.php

 <?php
   class VotesController extends AppController {

}

?>
您应该使用:var$name='投票';(复数)并确保您的模型名为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);
}

在控制器内部,不要进入模型。

尝试清除tmp/cache目录。
对我来说已修复。

数据源设置正确,因为其他模型与数据库一起工作。我试着这么做,但同样的事情发生了:\n仔细检查您是否已删除
APP/tmp
中的所有缓存文件;并再次检查您的
投票
表是否与
数据库中的
$default
中提到的数据库在同一个数据库中。php
被否决,因为a)模型名称是单数的,b)在模型中具有向上投票功能是可以的。是的,您完全正确。根据cakephp惯例,当我键入vots.php时是我的错误,模型应该是单数形式。至于第二点,如果你读了我的答案,我说应该在控制器中完成,但是谢谢你的输入。我会编辑这篇文章。
 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);
}