Yii 2.0中用于数据库迁移的命令

3
在学习Yii 2.0时,我发现人们迁移数据库的方法不尽相同。我通常遵循的第一种方法是从yii 2的指南中获得的。
使用此指南,我会使用如下命令:yii migrate/create migrationfileyii migrate 通常在我的迁移文件up()方法中,我会插入以下代码:
$this->createTable('news', [
        'id' => Schema::TYPE_PK,
        'title' => Schema::TYPE_STRING . ' NOT NULL',
        'content' => Schema::TYPE_TEXT,
]);

然而,我也看到了一些教程,例如这个,它在迁移文件中使用了略有不同的命令和代码。从第二个教程中,我使用了php yii migrate/create migrationfile 虽然在迁移文件up()方法中使用的语法大致是这样的:
return $this->createTable('posts', [
        'id' => 'INT PRIMARY KEY AUTO_INCREMENT',
        'title' => 'VARCHAR(255)',
        'content' => 'TEXT',

现在,这已经引起了一些问题。 1. php yiiyii命令之间有什么区别吗? 2. 使用Schema::与不使用Schema::的区别是什么?是否在迁移数据库方面更好,因为这是Yii迁移指南上写的,还是只是个人喜好呢?

与论坛网站不同,我们在 [so] 上不使用“谢谢”、“感激任何帮助”或签名。请参见“是否应该从帖子中删除‘Hi’、‘谢谢’、标语和称呼?”。顺便说一下,“Thanks in advance”应为“Thanks in advance”,而非“Thanks in advanced”。 - John Saunders
1个回答

6

1) 使用 yiiphp yii 是完全相同的。如果你查看 yii 文件,你会在第一行看到这个: #!/usr/bin/env php。这叫做 "shebang" 语法,并指示你的 shell 自动使用 php 二进制文件执行 yii 脚本。参见:https://en.wikipedia.org/wiki/Shebang_%28Unix%29

2) 这里的区别在于灵活性。如果使用 Schema::TYPE_PK 语法,Yii 将根据你的数据库后端自动确定确切的列类型。例如,在 MySQL 中,Schema::TYPE_PK 将转换为 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


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