zend Framework quickstart表必须有一个主键,但没有找到
问题描述:
我遵循:http://framework.zend.com/manual/en/learning.quickstart.create-model.html。zend Framework quickstart表必须有一个主键,但没有找到
在问题发生之后继续打墙。我现在一个是以下错误:
An error occurred
Application error
Exception information:
Message: A table must have a primary key, but none was found
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',
)
但我相信我的表有表的主键码:
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");
不明白为什么得到错误
答
在Zend框架所有表都应该有主键列。在你的模型中,你应该设置主列的名字。
例如,表用户:
class Application_Model_TableUser extends Zend_Db_Table_Abstract
{
protected $_name = 'user'; // table name
protected $_primary = 'id'; // primary column name
}
答
我得到了同样的错误。我发现,那Zend的缓存数据库的元数据(由于性能原因很明显)。在我的情况下,我放弃并创建了一个同名的表。新表有一个主列,而旧的一个都没有。删除Zend缓存解决了我的问题。
我:类Application_Model_DbTable_Guestbook扩展Zend_Db_Table_Abstract { 保护$ _name = '留言'; 保护$ _primary = 'ID'; } – 2012-08-14 14:57:12
对不起是我加入这个但这导致一个新的错误见问题http://stackoverflow.com/questions/11955062/primary-key-columns-id-are-not-columns-in-this-表 – 2012-08-14 14:58:59