主键列(S)(ID)不在此表中的列()(Primary key column(s) (id) are

2019-06-27 00:56发布

我下面的: 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");

不明白为什么收到错误。

我如何能看到它甚至拿起正确的数据库

Answer 1:

Zend_Db_Table_Abstract含有受保护的属性称为_primary默认为id

它假定id是表的主键,是一个序列(自动递增)。

由于您的表定义说, id是主键,你应该摆脱,增加了对指数的第二SQL命令的id列。 由于其已经是一个主键,这是一个索引。

删除表,并使用你在你的问题有create table语句重新创建它,只是不做CREATE INDEX的一部分。 在此之后,你应该能够继续。



Answer 2:

我认为你的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)
);


Answer 3:

这种错误可能是由于(意外)使用MD5(空)作为缓存ID引起。 或任何其他惯例值,对于这个问题,例如,1,0,真的,假的。 然而,空很可能会在这方面的罪魁祸首,因为它可以通过一个未定义的变量产生。

一个修复程序可能是简单的:

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


Answer 4:

我遇到过同样的问题。 但问题是,数据库在留言-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);
并且,当然,再次运行该脚本。



文章来源: Primary key column(s) (id) are not columns in this table ()