Yii 2.0中的数据库迁移命令

时间:2015-05-07 08:38:42

标签: php mysql yii

在研究Yii 2.0时,我遇到了人们迁移数据库的不同方式。第一个,我通常来自yii 2's guide

使用本指南,我使用 yii migrate / create migrationfile yii migrate 等命令

通常在我的迁移文件 up()中,方法I会像这样插入代码:

$this->createTable('news', [
        'id' => Schema::TYPE_PK,
        'title' => Schema::TYPE_STRING . ' NOT NULL',
        'content' => Schema::TYPE_TEXT,
]);

但是,我也看到了一些教程,例如this one,它们在迁移文件中使用了稍微不同的命令和代码。从第二个教程开始,我使用了 php yii migrate / create migrationfile

虽然迁移文件 up()方法中使用的语法是这样的:

return $this->createTable('posts', [
        'id' => 'INT PRIMARY KEY AUTO_INCREMENT',
        'title' => 'VARCHAR(255)',
        'content' => 'TEXT',

现在,这导致了许多问题。 1. php yii yii 命令之间有区别吗? 2.使用架构:: 与不使用它之间的区别是什么?这是迁移数据库的一种更好的方法,因为它是在Yii的迁移指南上写的,或者仅仅是一个偏好的问题?

1 个答案:

答案 0 :(得分:5)

1)使用yiiphp yii完全相同。如果您查看yii文件,则会在第一行看到此信息:#!/usr/bin/env php。这被称为" shebang"语法,并指示shell使用yii二进制文件自动执行php脚本。请参阅:https://en.wikipedia.org/wiki/Shebang_%28Unix%29

2)这里的区别在于灵活性。如果使用Schema::TYPE_PK语法,Yii将根据您的数据库后端自动确定确切的列类型。例如,Schema::TYPE_PK会在MySQL中转换为int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,但如果您将Postgres用作数据库,则会转换为serial NOT NULL PRIMARY KEY。 [1]

在实践中,您使用哪种方法不太可能有所不同,因为您可能不会在项目中途切换到不同类型的数据库,因此不需要使您的迁移脚本与数据库无关。根据您的偏好设置,您可以选择Schema语法以获得额外的灵活性,或者选择硬编码语法,以便将来阅读它们的人更清楚地了解迁移定义。

[1]请参阅https://github.com/yiisoft/yii2/blob/master/framework/db/pgsql/QueryBuilder.php#L21https://github.com/yiisoft/yii2/blob/master/framework/db/mysql/QueryBuilder.php#L24