尝试运行以下内容时,我遇到了以下问题:
$store = new Store();
$store->url =$this->form_validation->set_value('website');
$store->save();
$store_id = $store->identifier();
Fatal error: Uncaught exception 'Doctrine_Connection_Exception' with message 'Couldn't get last insert identifier.' in /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Connection/UnitOfWork.php:932 Stack trace: #0 /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Connection/UnitOfWork.php(632): Doctrine_Connection_UnitOfWork->_assignIdentifier(Object(Category_store_assn)) #1 /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Connection/UnitOfWork.php(562): Doctrine_Connection_UnitOfWork->processSingleInsert(Object(Category_store_assn)) #2 /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Connection/UnitOfWork.php(81): Doctrine_Connection_UnitOfWork->insert(Object(Category_store_assn)) #3 /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Record.php(1691): Doctrine_Connection_UnitOfWork->saveGraph(Object(Category_store_assn)) #4 /home/yummm/public_html/system/application/controllers/auth.php(375): Doctrine_Reco in /home/yummm/public_html/system/application/plugins/doctrine/lib/Doctrine/Connection/UnitOfWork.php on line 932
当我回显$ store_id时,似乎没有任何问题就抓住了最后一个id。知道为什么即使ID正确传递,这个错误仍然会出现吗?
答案 0 :(得分:2)
列定义本身可能未设置为auto_increment。检查表定义:(假设MySQL)
DESCRIBE table_name;
并确保您的ID字段标记为auto_increment。如果不是Doctrine将尝试获取表的最后一个标识符但会失败,因为只有auto_increment列响应MySQL的LAST_INSERT_ID()函数。
答案 1 :(得分:1)
与Doctrine 1.2相同的问题。这个不起作用:
$this->hasColumn('id', 'int', null, array(
'primary' => true,
'autoincrement' => true
));
这个人做了:
$this->hasColumn('id', 'integer', 4, array(
'type' => 'integer',
'length' => 4,
'unsigned' => true,
'primary' => true,
'autoincrement' => true,
));
不确定为什么会有所不同,但希望有所帮助。
答案 2 :(得分:0)
我发现问题出在'autoincrement'=>对于hasColumn()内的主键字段为true。 如果我设置'autoincrement'=>错,问题就消失了。
但该表的主键字段是自动增量字段。它仍然很奇怪,在其他计算机上没有任何错误。所有计算机上的应用程序和数据库都是相同的。
答案 3 :(得分:0)
现在我发现它是因为PDO对象的lastInsertId()方法返回0。 所以,假设问题出在PDO驱动程序中,而不是Doctrine错误。 需要重新安装PHP或PDO扩展。 另请参阅http://bugs.php.net/bug.php?id=33618。
答案 4 :(得分:0)
您在Store表中的ID可能未设置为自动增量。在这种情况下,您必须通过hasColumn函数中使用的mixed option参数将其“告诉”到doctrine记录模型:
$this->hasColumn('id', 'integer', 11, array(
'primary' => true,
'autoincrement' => false)
);
或者根据需要设置ID自动增量。
答案 5 :(得分:0)
我的情况是PDO驱动程序错误。
答案 6 :(得分:-1)
也许您覆盖了setTableDefinition()
方法,现在没有hasColum()
调用您的id
属性。