如何在dbforge中的另一列之前添加列?

时间:2017-09-25 02:27:39

标签: codeigniter dbforge

我想添加名称为' accept_loc'的列,输入' VARCHAR'到3个数据库表(使用来自codeigniter的dbforge库)Assum它们被命名为t1,t2,t3。

t1结构:

  • ID
  • bla_bla
  • pick_up_loc
  • ....

t2结构:

  • ID
  • pick_up_loc
  • ....

t3结构:

  • ID
  • bla_bla
  • pick_up_loc
  • ....

如果我在迁移功能中使用了以下代码:

$fields = array(
        'accept_lat' => array(
            'accept_loc' => 'VARCHAR',
            'constraint' => '50',
            'after' => 'id',
        ),
    );
$this->dbforge->add_column('t1',$fields);
$this->dbforge->add_column('t2',$fields);
$this->dbforge->add_column('t3',$fields);

结果:

t1结构:

  • ID
  • accept_loc
  • bla_bla
  • pick_up_loc
  • ....

t2结构:

  • ID
  • accept_loc
  • pick_up_loc
  • ....

t3结构:

  • ID
  • accept_loc
  • bla_bla
  • pick_up_loc
  • ....

它不是一个好看的结构。如何在“pick_up_loc”之前添加列?所有这些(n个数据库表)。

3 个答案:

答案 0 :(得分:1)

请尝试将后置换成大写字母,即' AFTER',after密钥中有一个错误,并且提到已修复here

    $fields = array(
        'accept_lat' => array(
            'accept_loc' => 'VARCHAR',
            'constraint' => '50',
            'AFTER' => 'id'
        )
    );

答案 1 :(得分:1)

add_column()中的第三个参数是$ after_field。因此,您不能之前添加该列,但可以这样做:

$this->dbforge->add_column('t1', $fields, 'bla_bla');
$this->dbforge->add_column('t2', $fields, 'id');
$this->dbforge->add_column('t3', $fields, 'bla_bla');

此外,您似乎正在命名字段“ accept_lat”,然后使用“ accept_loc”而不是“ type”元素,这会造成混乱。

答案 2 :(得分:0)

迟到聚会,但为了澄清您的代码,例如在t1上,应如下所示:

 $fields = array(
            'accept_lat' => array('type' => 'TEXT')
);
    $this->dbforge->add_column('t1', $fields, 'id');

因此accept_lat将添加在表t1中的id列之后。