php doktrin son tanımlayıcı sorunu

6 Cevap php

Ben aşağıdaki çalıştırmak çalışırken aşağıdaki sorunu için koşuyorum:

$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

Ben $ store_id echo zaman, herhangi bir sorun olmadan son id kapma gibi görünüyor. Kimliği doğru geçiyor olsa bile bu hata geliyor tutar Herhangi bir fikir neden?

6 Cevap

Bu sütun tanımı kendisi AUTO_INCREMENT olarak kurmak olmadığını mümkündür. (MySQL varsayarak): ile tablo tanımını edin

DESCRIBE table_name;

ve Kimlik alanı AUTO_INCREMENT olarak işaretlenmiş olduğundan emin olun. Değilse Doktrini tablo için son tanımlayıcı almak için çalışacağız ama sadece auto_increment sütunlar MySQL'in LAST_INSERT_ID () işlevine tepki nedeniyle başarısız olur.

I have found that the problem is in 'autoincrement' => true for primary key field inside hasColumn(). If I set 'autoincrement' => false, the problem is gone.

Ama bu tablonun birincil anahtar alanı bir autoincremented alanıdır. Ve diğerleri bilgisayarlarda Hiçbir hata olduğunu, hala garip. Uygulama ve veritabanları tüm bilgisayarlarda aynıdır.

Mağaza tablodan kimliği muhtemelen değiştirmemesi için ayarlı değil. Bu durumda, hasColumn fonksiyonunda kullanılan karma seçenek parametresi tarafından doktrini rekor modele bunu 'söyle' var:

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

Gerekirse veya kimlik AUTOINCREMENT ayarlayın.

Ben PDO sürücüsü hata oldu dava benim.

Doktrin 1.2 benim için aynı sorun. Bu bir işe yaramadı:

    $this->hasColumn('id', 'int', null, array(
    'primary'       => true,
    'autoincrement' => true
));

Ve bunu yaptım:

    $this->hasColumn('id', 'integer', 4, array(
      'type' => 'integer',
      'length' => 4,
      'unsigned' => true,
      'primary' => true,
      'autoincrement' => true,
));

Değil emin niçin fark, ancak bu yardımcı olur umarım.

Belki setTableDefinition() yöntemini overwrote, ve şimdi id nitelik için hasColum() çağrı var.