2010-02-03 3 views
3

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

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

ответ

-1

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

0

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

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

0

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

+1

этот отчет об ошибке был закрыт на пять лет. Драйверы PDO должны работать должным образом. – Thomas

2

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

DESCRIBE table_name; 

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

0

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

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

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

0

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

1

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

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

Смежные вопросы