Doktrin imzasız doğrulama hatası saklamak created_at

2 Cevap php

Ben Doktrin 1.2.2 ve 1.2.3 Timestampable işlevselliği ile ilgili sorunlar yaşıyorum.

I) (Benim Tutanak kurtarmaya çalışırken almak hatadır:

Mesajı yakalanmamış özel durum 'Doctrine_Validator_Exception' Doğrulama sınıf XXX başarısız 1 alan doğrulama hatası vardı: * 1 validator failed on created_at (unsigned) 'in ...

: Ben MySQL tablosunda ilgili alan yarattık

created_at DATETIME NOT NULL,

Sonra setTableDefinition in () var:

    $this->hasColumn('created_at', 'timestamp', null, array(
         'type' => 'timestamp',
         'fixed' => false,
         'unsigned' => false,
         'primary' => false,
         'notnull' => true,
         'autoincrement' => false,
         ));

Düz generateModelsFromDb çıkışında () alınan edilmektedir.

Ve nihayet benim setup () gibi görünüyor:

public function setUp()
{
    parent::setUp();
    $this->actAs('Timestampable', array(
                                    'created' => array(
                                                    'name' => 'created_at',
                                                    'type' => 'timestamp',
                                                    'format' => 'Y-m-d H:i:s',
                                                    'disabled' => false,
                                                    'options' =>  array()
                                  ),
                                    'updated' => array(
                                                    'disabled' => true
                                  )));
}

(Ben 'yaratılan' için bu alanların tümünü tanımlamak değil denedim, ama ben aynı sorunu olsun.)

Ben ne yapıyorum yanlış olarak stumped biraz kulüpler - Doktrin bir 'damgası' veri türü karşı herhangi bir imzasız çek çalışıyor olacaktı neden bir şey göremiyorum ...

Updated

MySQL (5.0.51a-24 + lenny5O) ile Debian Lenny (5.0.8) gidiyorum. Sorun Doktrini 1.2.3 ve 1.2.2 ile gerçekleşiyor. Ben Doktrini ait örnekler DAMGASI MySQL sütunları yerine tarihsaat kullanmak fark, bu yüzden bu değişti ve yeniden üretilen, ama sorun hala tekrarladı. Ben de MySQL tanımı ile ilgili bir sorun olabileceğini düşündüm, bu yüzden doğru SQL almak için generateSqlFromModels koştu, ama bu çok (datetime null değil) iyiydi.

Ben tamamen stumped - Ben bu anladım alabilirsiniz görmek için Doktrin JIRA bir hata giriş var: DC-965

Herhangi bir yardım minnetle aldı!

Alex

2 Cevap

Yesss solved on my case! And hopefully on your case as well!

Ben çalıştı projeye başladığımızda, ben olmak için varsayılan olarak tüm sütunları istedi:

notnull: true
unsigned: true

which you can set in yml config files in symfony or with plain php like: $manager->setAttribute(Doctrine::ATTR_DEFAULT_COLUMN_OPTIONS, array('notnull' => true, 'unsigned' => true));

And of course unsigned attribute DOES NOT get applied in the database for string columns right? Which made me assume Doctrine wouldn't care either about it... WRONG

Eğer Doğrulayıcıları aktive ettiğinizde: http://www.doctrine-project.org/projects/orm/1.2/docs/manual/component-overview/pl#validator, Doktrin imzasız bir validator ile bu dize sütunu, ya da zaman damgası / datime sütun doğrulamaya çalışır!

Benim durumumda o varsayılan sütun özniteliği kaldırılıyor bunu çözdü. Eğer varsayılan set varsa Ve sonra belki bu yöntemi kullanarak False olarak imzasız ayarlamanız gerekir ve daha sonra bunu ihtiyacınız modeli tanımı sütun başına bunu.

Eğer işaret olarak Umm ... tamamen bu Doktrini özellikleri hakkında emin değil, DATETIME/TIMESTAMP sayısal bir tip değil gibi, UNSIGNED niteliği ile uğraşmaz.

Ben senin tablo tanımından UNSIGNED beyanı kaldırarak başlamak istiyorum.

Umut olur.