3

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");

エラーが発生する理由がわかりません。

正しいデータベースを取得しているかどうかを確認するにはどうすればよいですか

4

4 に答える 4

1

Zend_Db_Table_Abstract_primaryには、デフォルトでと呼ばれる保護されたプロパティが含まれていますid

idがテーブルの主キーであり、シーケンス (自動インクリメント) であると想定しています。

あなたのテーブル定義はそれidが主キーであることを示しているので、列にインデックスを追加する 2 番目の SQL コマンドを削除する必要がありidます。すでに主キーなので、インデックスです。

テーブルを削除し、質問にある create table ステートメントを使用して再作成します。その部分を実行しないでくださいCREATE INDEX。その後、続行できるはずです。

于 2012-08-14T20:42:56.377 に答える
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)
);
于 2012-08-15T06:39:50.030 に答える
0

同じ問題がありました。問題は、データベースが guestbook.db ではなく、guestbook-dev.db に作成されたことです。このファイルを調べることで確認できます。解決策は、scripts/load.sqlite.php を
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (null === $env) ? 'development' : $env);
から:に変更
defined('APPLICATION_ENV') || define('APPLICATION_ENV', (null === $env) ? 'production' : $env);
し、もちろんスクリプトをもう一度実行することでした。

于 2014-12-13T09:18:10.263 に答える