我的应用程序可以与其他模型一起使用,但由于某种原因,当我尝试保存到数据库表时,"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);
}
在控制器内部,而不是在模型中。