2012-08-14 27 views
3

我遵循:http://framework.zend.com/manual/en/learning.quickstart.create-model.html主鍵列(s)(id)不在此表中的列()

在問題發生之後繼續打牆。我現在一個是以下錯誤:

An error occurred 

Application error 

Exception information: 

Message: Primary key column(s) (id) are not columns in this table() 

Stack trace: 

#0 C:\wamp\www\zendtest\quickstart\library\Zend\Db\Table\Abstract.php(982): Zend_Db_Table_Abstract->_setupPrimaryKey() 
#1 C:\wamp\www\zendtest\quickstart\library\Zend\Db\Table\Select.php(100): Zend_Db_Table_Abstract->info() 
#2 C:\wamp\www\zendtest\quickstart\library\Zend\Db\Table\Select.php(78): Zend_Db_Table_Select->setTable(Object(Application_Model_DbTable_Guestbook)) 
#3 C:\wamp\www\zendtest\quickstart\library\Zend\Db\Table\Abstract.php(1018): Zend_Db_Table_Select->__construct(Object(Application_Model_DbTable_Guestbook)) 
#4 C:\wamp\www\zendtest\quickstart\library\Zend\Db\Table\Abstract.php(1326): Zend_Db_Table_Abstract->select() 
#5 C:\wamp\www\zendtest\quickstart\application\models\GuestbookMapper.php(58): Zend_Db_Table_Abstract->fetchAll() 
#6 C:\wamp\www\zendtest\quickstart\application\controllers\GuestbookController.php(14): Application_Model_GuestbookMapper->fetchAll() 
#7 C:\wamp\www\zendtest\quickstart\library\Zend\Controller\Action.php(516): GuestbookController->indexAction() 
#8 C:\wamp\www\zendtest\quickstart\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('indexAction') 
#9 C:\wamp\www\zendtest\quickstart\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#10 C:\wamp\www\zendtest\quickstart\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#11 C:\wamp\www\zendtest\quickstart\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#12 C:\wamp\www\zendtest\quickstart\public\index.php(26): Zend_Application->run() 
#13 {main} 
Request Parameters: 

array (
    'controller' => 'guestbook', 
    'action' => 'index', 
    'module' => 'default', 
) 

但我相信我的表中有一個主鍵ID爲表:

CREATE TABLE guestbook (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 
    email VARCHAR(32) NOT NULL DEFAULT '[email protected]', 
    comment TEXT NULL, 
    created DATETIME NOT NULL 
); 

CREATE INDEX "id" ON "guestbook" ("id"); 

不明白爲什麼收到錯誤。

我怎麼能看它是否甚至拿起正確的數據庫

+1

檢查列名後面的尾部空格,並請發出查詢'SHOW CREATE TABLE guestbook'的輸出,這樣我們可以仔細檢查實際結構 – 2012-08-14 15:10:38

+0

我們再次見面時如何顯示出輸出的cmd promt – 2012-08-14 15:36:45

+0

! :) ...由於您使用的是wamp,因此您必須在系統上安裝phpmyadmin。轉到http:// localhost/phpmyadmin,在那裏你可以看到左側的所有數據庫,點擊你的數據庫。然後,將會有一個名爲SQL的選項卡,您可以將@TimFountain的命令放在那裏,並告訴我們輸出的內容是什麼......另外,請確保您在表格中有一些數據:) – Karma 2012-08-14 16:17:20

回答

1

Zend_Db_Table_Abstract含有受保護的屬性稱爲_primary默認爲id

它假設id是表的主鍵,並且是一個序列(自動增量)。

由於表定義指出id是主鍵,因此應該刪除在id列中添加索引的第二個SQL命令。由於它已經是主鍵,它是一個索引。

刪除表格並使用您的問題中的create table語句重新創建表格,只是不要執行CREATE INDEX部分。之後,你應該能夠繼續。

0

我認爲你的SQL模式不正確。嘗試創建與主KYY表是這樣的:

CREATE TABLE guestbook (
    id INTEGER NOT NULL AUTO_INCREMENT, 
    email VARCHAR(32) NOT NULL DEFAULT '[email protected]', 
    comment TEXT NULL, 
    created DATETIME NOT NULL, 
    PRIMARY KEY (id) 
); 
+0

因此一直在尋找它它似乎甚至沒有創建數據庫,即使它說了。想重新安裝wamp並重新開始 – 2012-08-15 09:39:59

0

此錯誤可能是由(意外)使用MD5(空)作爲緩存ID引起。或者就此而言,任何其他習慣值,例如1,0,真,假。然而,在這種情況下,null很可能是罪魁禍首,因爲它可能由未定義的變量產生。

$cache = Zend_Registry::get('cache'); 
    $cache->remove(md5(null)); 
0

我有同樣的問題:

爲A修復可能是那樣簡單。問題在於該數據庫是在guestbook-dev.db而不是guestbook.db中創建的。你可以通過查看這些文件來檢查它。解決的辦法是從
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (null === $env) ? 'development' : $env);
改變腳本/ load.sqlite.php到:
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (null === $env) ? 'production' : $env);
,當然,再次運行該腳本。