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


Missing database table in CakePHP, I've followed the conventions and tried everything

我的应用程序可以与其他模型一起使用,但由于某种原因,当我尝试保存到数据库表时,"Vote"模型无法连接到数据库表。我已经做了几天了,我觉得我已经尝试了所有的方法!

这是我的控制器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);
    }
}
?>

当然,在我的数据库中,我有一个表"votes",其中有列id、u_id、t_id、upvote和downpote。在一切执行之后,我得到了这个错误:

缺少数据库表

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

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

尝试删除此行

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

并将其添加到类中

var $useTable = 'votes';

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

尝试清除tmp/cache目录。为我修复。

根据CakePhp惯例,您的控制器应该是复数,末尾应该有"控制器"一词,还要确保您将控制器命名为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);
}

在控制器内部,而不是在模型中。