使用 CakePHP 3.x 构建第一个 Hello World 应用程序(数据库表迁移。第 2 部分)
你可以轻松地为你的数据库提供表格,或者如果你愿意,可以使用它们。如果你希望这样做,你应该学习如何为所需的数据库编写 Migrations
。
迁移文件必须位于 config/Migrations
文件夹中。文件名可以采用下列格式:
YYYYMMDDHHIISS_(Create|Alter|Delete)AdministratorsTable.php
(1-9){1,}_(Create|Alter|Delete)AdministratorsTable.php
<?php
use Migrations\AbstractMigration;
use Cake\Log\Log;
/**
* Class AdministratorsTableMigration
*/
class AdministratorsTableMigration extends AbstractMigration
{
/**
* @var string
*/
private $_tableName;
/**
* @var string
*/
private $_tablePrefix;
public function init()
{
$this->_tableName = '"Administrators"';
$this->_tablePrefix = 'administrators';
}
public function up()
{
Log::info("Trying to create {$this->_tableName} table");
$administratorsTable = $this->table($this->_tablePrefix);
if ($administratorsTable->exists()) {
return Log::warning("Table {$this->_tableName} already exists");
}
$administratorsTable
->addPrimaryKey('id')
->addColumn('username', 'char', [
'length' => 25,
'null' => false
])
->addColumn('password', 'char', [
'length' => 255,
'null' => false
])
->addColumn('email', 'char', [
'length' => 50,
'null' => false
])
->addColumn('first_name', 'char', [
'length' => 50,
'null' => false
])
->addColumn('last_name', 'char', [
'length' => 50,
'null' => false
])
->addColumn('avatar', 'char', [
'length' => 255,
'default' => '/img/no-avatar.png'
])
->addColumn('active', 'boolean', [
'default' => 0
])
->addTimestamps()
->create();
return Log::notice("Table {$this->_tableName} has been created");
}
public function down()
{
if ($this->table($this->_tablePrefix)->exists()) {
$this->table($this->_tablePrefix)->drop();
return Log::info("Table {$this->_tableName} has been dropped");
}
return Log::warning("Table {$this->_tableName} does not exists");
}
}
如果要运行迁移,则需要运行下一个命令:
bin/cake migrations migrate
创建表(-s)。
如果要回滚:
bin/cake migrations rollback
- 将恢复上次迁移,其中存在 drop()
功能
bin/cake migrations (-t|--target) all
- 将恢复所有迁移,其中存在 drop()
功能