在Codeigniter迁移中添加外键

10

有人能帮我在Codeigniter迁移数据库中添加外键吗?这是代码:

public function up()
{
    $this->dbforge->add_field(array(
    'ID_PELAYANAN' => array(
    'type' => 'INT',
    'constraint' => 50,
    'auto_increment' => TRUE
    ),

    'THBLMUT' => array(
    'type' => 'VARCHAR',
    'constraint' => '6',
    ),

    'ID_DIST' => array(
    'type' => 'VARCHAR',
    'constraint' => '2',
    ),

    'ID_AREA' => array(
    'type' => 'VARCHAR',
    'constraint' => '5',
    ),

    'ID_RAYON' => array(
    'type' => 'VARCHAR',
    'constraint' => '5',
    ),

    'N_RAYON' => array(
    'type' => 'CHAR',
    'constraint' => '70',
    ),

    ));
    $this->dbforge->add_key('ID_PELAYANAN', TRUE);
    $this->dbforge->create_table('pelayanan');
}
public function down()
{
    $this->dbforge->drop_table('pelayanan');
    }
}

我想在这个表中将'ID_AREA'和'ID_RAYON'设置为外键,应该怎么解决?

3个回答

17

以下是两种方法。第一种方法需要使用create_table命令,而第二种方法则可以在向现有表中添加字段时完成。

$this->dbforge->add_field('CONSTRAINT FOREIGN KEY (id) REFERENCES table(id)');

$this->dbforge->add_column('table',[
    'CONSTRAINT fk_id FOREIGN KEY(id) REFERENCES table(id)',
]);

2
这实际上应该在他们的锻造文档中(https://www.codeigniter.com/user_guide/database/forge.html?highlight=forge#passing-strings-as-fields)...毕竟这是如此简单! - CPHPython

3
你可以在之后编写一个普通的SQL查询来完成这个任务。
$this->dbforge->create_table('pelayanan');

请看以下示例:
$this->db->query('ALTER TABLE `pelayanan` ADD FOREIGN KEY(`ID_AREA`) REFERENCES 'the_other_table_name'(`ID_AREA`) ON DELETE CASCADE ON UPDATE CASCADE;');

你可以对其他外键执行同样的操作。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接