2012-07-11 58 views
1

我的應用程序可以與其他模型一起工作,但出於某種原因,當我嘗試保存時,「投票」模型無法連接到數據庫表。我已經在這裏呆了幾天,我覺得我已經嘗試了一切!在CakePHP中缺少數據庫表,我遵循慣例並嘗試了一切

這裏是我的控制器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

*雙重檢查*您已刪除'APP/tmp'中的所有緩存文件; *重複檢查*您的'votes'表與database.php中'$ default'中引用的數據庫位於同一個數據庫中 – Ross 2012-07-11 15:04:43

回答

2

嘗試刪除這條線

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

,並添加此對類

var $useTable = 'votes'; 

它看起來像它試圖用正確的名稱。所以這可能不是問題。你能否驗證你的數據源設置是否正確。

+0

數據源設置正確,因爲其他模型使用db。我嘗試過這樣做,發生同樣的事情:\ – 2012-07-11 14:56:56

0

據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); 
} 

你的控制器內未納入模型。

+1

Downvoted,因爲a)模型名稱是單數,並且b)在模型中具有upvote功能是可以的。 – dhofstet 2012-07-12 04:56:03

+0

是的,你是絕對正確的。當我輸入Votes.php時,這是我的錯誤,根據cakephp慣例,模型應該是單數形式。至於第二點,如果你閱讀我的答案,我說應該在控制器中完成,但是感謝你的輸入。我將編輯帖子。 – 2012-07-12 19:58:44

1

嘗試清除tmp/cache目錄。 固定給我。