Доктрина php последняя проблема с идентификатором - PullRequest
3 голосов
/ 03 февраля 2010

Я сталкиваюсь с проблемой ниже при попытке запустить следующее:

$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, кажется, что он захватывает последний идентификатор без проблем. Любая идея, почему эта ошибка продолжает появляться, даже если идентификатор проходит правильно?

Ответы [ 7 ]

2 голосов
/ 08 июля 2010

Возможно, само определение столбца не установлено как auto_increment. Проверьте определение таблицы с помощью: (при условии MySQL)

DESCRIBE table_name;

и убедитесь, что ваше поле идентификатора помечено как auto_increment. Если это не так, Doctrine попытается получить последний идентификатор для таблицы, но потерпит неудачу, потому что только столбцы auto_increment отвечают на функцию MySQL LAST_INSERT_ID ().

1 голос
/ 21 апреля 2011

Та же проблема для меня с Доктриной 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,
));

Не уверен, почему разница, но надеюсь, что это поможет.

0 голосов
/ 19 марта 2011

В моем случае это была ошибка драйвера PDO.

0 голосов
/ 25 августа 2010

Ваш идентификатор из таблицы Store, вероятно, не настроен на автоинкремент. В этом случае вы должны «сообщить» это модели записи доктрины, используя параметр смешанного параметра в функции hasColumn:

$this->hasColumn('id', 'integer', 11, array(
    'primary' => true,
    'autoincrement' => false) 
    );

Или, при необходимости, установите автоинкремент ID.

0 голосов
/ 30 апреля 2010

И теперь я обнаружил, что это потому, что метод lastInsertId () объекта PDO возвращает 0. Итак, предположим, проблема в драйвере PDO, и это не ошибка Doctrine. Необходимо переустановить расширение PHP или PDO. Также см. http://bugs.php.net/bug.php?id=33618.

0 голосов
/ 30 апреля 2010

Я обнаружил, что проблема в 'autoincrement' => true для поля первичного ключа внутри hasColumn (). Если я установлю 'autoincrement' => false, проблема исчезнет.

Но поле первичного ключа этой таблицы является автоинкрементным полем. И еще странно, что на остальных компьютерах ошибок нет. Приложение и базы данных одинаковы на всех этих компьютерах.

0 голосов
/ 03 февраля 2010

Возможно, вы переписали метод setTableDefinition(), и теперь для вашего атрибута id нет вызова hasColum().

...