Ошибка проверки правильности без знака в доктрине - PullRequest
0 голосов
/ 07 апреля 2010

У меня проблемы с функцией Timestampable в Doctrine 1.2.2 и 1.2.3.

Ошибка при попытке сохранить () моей записи:

Uncaught исключение «Doctrine_Validator_Exception» с сообщением «Проверка не удалась в классе XXX 1 поле имело ошибку проверки: * 1 валидатор не был выполнен на create_at (без знака) 'в ...

Iсоздал соответствующее поле в таблице MySQL как:

created_at DATETIME NOT NULL,

Затем в setTableDefinition () у меня есть:

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

, который берется прямо из вывода generateModelsFromDb ().

И, наконец, мой setUp () выглядит следующим образом:

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
                                  )));
}

(я пытался не определять все эти поля как «созданные», но у меня возникла та же проблема.)

Я немного озадачен тем, что я делаю неправильно - во-первыхЯ не понимаю, почему Doctrine запускает какие-либо неподписанные проверки для типа данных timestamp ...

UpdaТед

Я нахожусь на Debian Lenny (5.0.8) с MySQL (5.0.51a-24 + lenny5O).Проблема возникает с Доктриной 1.2.3 и 1.2.2.Я заметил, что в примерах Doctrine используются столбцы TIMESTAMP MySQL, а не DATETIME, поэтому я изменил их и сгенерировал заново, но проблема все еще повторялась.Я также подумал, что это может быть проблемой с определением MySQL, поэтому я запустил generateSqlFromModels, чтобы получить правильный SQL, но это тоже нормально (DATETIME NOT NULL).

Я полностью озадачен - зарегистрировал ошибкув Доктрине JIRA, чтобы узнать, смогу ли я выяснить это: DC-965

Любая помощь с благодарностью получена!

Алекс

Ответы [ 4 ]

1 голос
/ 10 ноября 2011

Yesss решено по моему делу!И, надеюсь, в вашем случае!

Когда я начал проект, над которым работал, я хотел, чтобы по умолчанию все мои столбцы были:

notnull: true
unsigned: true

, которые вы можете установить в конфигурационных файлах yml.в symfony или с простым php, например: $ manager-> setAttribute (Doctrine :: ATTR_DEFAULT_COLUMN_OPTIONS, array ('notnull' => true, 'unsigned' => true));

И, конечно, атрибут без знака НЕ ​​НЕТприменять в базе данных для строковых столбцов не так ли?Что заставило меня предположить, что Doctrine это тоже не волнует ... НЕПРАВИЛЬНО

Когда вы активируете валидаторы: http://www.doctrine -project.org / projects / orm / 1.2 / docs / manual / component-Overview / pl # validator , Doctrine пытается проверить этот столбец строки или столбец timestamp / datime с помощью валидатора без знака!

В моем случае удаление этого атрибута столбца по умолчанию решило эту проблему.И если вы не установили значения по умолчанию, то, возможно, вам следует установить unsigned как False, используя этот метод, а затем сделать это для каждого столбца в определении модели, где вам это нужно.

0 голосов
/ 09 февраля 2011

Ваше определение должно следовать этому: (это из Yaml)

created_atn:
  type: timestamp(25)
  fixed: false
  unsigned: false
  primary: false
  notnull: false
  autoincrement: false
0 голосов
/ 01 июля 2011

Я добавил следующий код в базовый каталог и соответствующий файл. И моя проблема была решена .. THX

  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
                                      )));
    }
0 голосов
/ 08 апреля 2010

Умм ... не совсем уверен в специфике Doctrine, но, как вы заметили, DATETIME/TIMESTAMP не имеет отношения к атрибуту UNSIGNED, так как это не числовой тип.

Я бы начал с удаления объявления UNSIGNED из определения вашей таблицы.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...