【问题标题】:Fuelphp: convert standard ORM model to model_temporalFuelphp:将标准 ORM 模型转换为 model_temporal
【发布时间】:2015-05-19 18:29:13
【问题描述】:

使用fuelphp,有没有办法修改现有的\ORM\Model 将其转换为\ORM\Model_Temporal?我开始考虑创建一个迁移,这需要 1)向我的表中添加必要的列(不难); 2)更新主键以将新列包含为复合主键的一部分(困难)。我遇到的问题是我在DBUtil 中看不到执行此操作的方法。

这样做的正确方法是什么?

【问题讨论】:

    标签: fuelphp fuelphp-orm


    【解决方案1】:

    目前DBUtil 不包含更改主键的方法,因为这样做的方法在数据库系统之间有所不同,DBUtil 实际上并不知道您正在使用什么 DBMS。

    为此,您必须在迁移中手动构建查询并使用DB::query() 来执行它。

    【讨论】:

      【解决方案2】:

      如果其他人面临同样的任务,这就是我最终要做的。我的数据库是 MySQL,如果您使用不同的 DBMS,可能必须更改语法。我原来的主键是一个名为 id 的自动递增列。

      class Modify_TableName_To_Temporal
      {
          public function up()
          {
              \DBUtil::add_fields('tablename',array(
                  'temporal_start'=>array('constraint'=>11, 'type'=>'int','default'=>0),
                  'temporal_end'=>array('constraint'=>11, 'type'=>'int','default'=>2147483647),
              ));
              \DB::query('ALTER TABLE tablename MODIFY id int, DROP PRIMARY KEY')->execute();
              \DB::query('ALTER TABLE tablename ADD PRIMARY KEY (id, temporal_start, temporal_end), MODIFY id int auto_increment')->execute();
          }
      
          public function down()
          {
              \DB::query('ALTER TABLE tablename MODIFY id int, DROP CONSTRAINT primary')->execute();
              \DB::query('ALTER TABLE tablename ADD PRIMARY KEY (id), MODIFY id int auto_increment')->execute();
              \DBUtil::drop_fields('tablename',array('temporal_start','temporal_end'));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-09
        • 1970-01-01
        • 2015-10-17
        • 2011-07-30
        • 2012-10-20
        • 1970-01-01
        • 1970-01-01
        • 2014-09-14
        相关资源
        最近更新 更多