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 列。一切执行后,我得到这个错误:

缺少数据库表

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

我试过删除 tmp 中的文件,以及重命名所有内容、打印查询等,但我似乎无处可去。任何帮助将不胜感激!

4

3 回答 3

2

尝试删除此行

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

并将其添加到课程中

var $useTable = 'votes';

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

于 2012-07-11T14:43:23.470 回答
1

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

于 2013-08-02T10:30:10.663 回答
0

根据 CakePhp 约定,你的控制器应该是复数形式,最后用 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 回答