代码之家  ›  专栏  ›  技术社区  ›  Alex Dean

条令无符号验证错误存储创建于

  •  0
  • Alex Dean  · 技术社区  · 16 年前

    我对条令1.2.2和1.2.3中的时间戳功能有问题。

    尝试保存()我的记录时出现的错误是:

    未捕获异常'distric_validator_exception'with message'validation failed in class xxx 1 field had validation error:*1 验证程序在创建时失败(未签名) 在…

    我在mysql表中创建了相关字段,如下所示:

    created_at 日期时间不为空,

    然后在settabledefinition()中,我有:

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

    直接从GenerateModelsFromDB()的输出中获取。

    最后,我的设置()如下:

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

    (我尝试不为“created”定义所有这些字段,但我得到了相同的问题。)

    关于我做错了什么,我有点困惑——首先,我不明白为什么条令会针对“timestamp”数据类型运行任何未签名的检查……

    更新的

    我在Debian Lenny(5.0.8)上使用MySQL(5.0.51a-24+Lenny5o)。问题发生在1.2.3和1.2.2条令中。我注意到条令的示例使用的是时间戳mysql列,而不是日期时间,所以我更改了时间戳并重新生成,但问题仍然存在。我还认为MySQL定义可能有问题,所以我运行generatesqlfrommodels来获取正确的SQL,但这也没问题(datetime不是空值)。

    我完全被难住了-在《圣战教义》中记录了一个错误,看看我是否能弄清楚: DC-965

    感谢您的帮助!

    亚历克斯

    4 回复  |  直到 13 年前
        1
  •  1
  •   bksunday    14 年前

    是的,我的案子解决了! 希望你的案子也能办到!

    当我开始我工作的项目时,我希望默认情况下,我的所有列都是:

    notnull: true
    unsigned: true
    

    您可以在symfony的yml配置文件中设置,也可以使用如下简单的php设置: $manager->setattribute(district::attr_default_column_options,array('notnull'=>true,'unsigned'=>true));

    当然,未签名的属性不会在数据库中应用于字符串列,对吗? 这让我觉得教义也不在乎…错误的

    激活验证器时: http://www.doctrine-project.org/projects/orm/1.2/docs/manual/component-overview/pl#validator ,条令试图用无符号验证器验证字符串列或时间戳/日期时间列!

    在我的例子中,删除默认的列属性解决了这个问题。如果您还没有设置默认值,那么也许您应该使用该方法将unsigned设置为false,然后根据需要在模型定义中的每列进行设置。

        2
  •  0
  •   Tom    16 年前

    嗯…不完全确定这一理论的具体内容,但正如你所指出的, DATETIME/TIMESTAMP 不处理无符号属性,因为它不是数字类型。

    我先把 UNSIGNED 来自表定义的声明。

    希望有帮助。

        3
  •  0
  •   Johnish    15 年前

    你的定义应该如下: (这是山药)

    created_atn:
      type: timestamp(25)
      fixed: false
      unsigned: false
      primary: false
      notnull: false
      autoincrement: false
    
        4
  •  0
  •   Andro Selva Anand Wadhwani    13 年前

    我已经将以下代码添加到基本目录和相应的文件中。 我的问题解决了……谢谢

      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
                                          )));
        }
    
    推荐文章