我关注:http://framework.zend.com/manual/en/learning.quickstart.create-model.html。
在问题之后继续撞墙。我目前的错误是:
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 'noemail@test.com',
comment TEXT NULL,
created DATETIME NOT NULL
);
CREATE INDEX "id" ON "guestbook" ("id");
不明白为什么会收到错误。
我怎样才能看到它是否正在选择正确的数据库
答案 0 :(得分:1)
Zend_Db_Table_Abstract
包含一个名为_primary
的受保护属性,默认为id
。
它假设id
是表的主键,是序列(自动增量)。
由于您的表定义表明id
是主键,因此您应该删除在id
列上添加索引的第二个SQL命令。由于它已经是主键,因此它是一个索引。
删除表并使用问题中的create table语句重新创建表,只是不要执行CREATE INDEX
部分。之后你应该能够继续。
答案 1 :(得分:0)
我认为您的SQL架构不正确。尝试使用这样的主要kyy创建表:
CREATE TABLE guestbook (
id INTEGER NOT NULL AUTO_INCREMENT,
email VARCHAR(32) NOT NULL DEFAULT 'noemail@test.com',
comment TEXT NULL,
created DATETIME NOT NULL,
PRIMARY KEY (id)
);
答案 2 :(得分:0)
此错误可能由(意外)使用 md5(null)作为缓存ID引起。或者任何其他习惯值,例如, 1,0,真,假。但是,null很可能是此上下文中的罪魁祸首,因为它可能由未定义的变量产生。
修复可能很简单:
$cache = Zend_Registry::get('cache');
$cache->remove(md5(null));
答案 3 :(得分:0)
我有同样的问题。问题是数据库是在guestbook-dev.db而不是guestbook.db中创建的。你可以通过查看这些文件来检查它。解决方案是从中更改脚本/ load.sqlite.php
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (null === $env) ? 'development' : $env);
至:
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (null === $env) ? 'production' : $env);
当然,再次运行脚本。