php doctrine最后一个标识符问题

时间:2010-02-03 06:34:16

标签: php doctrine

尝试运行以下内容时,我遇到了以下问题:

$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正确传递,这个错误仍然会出现吗?

7 个答案:

答案 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属性。