《laravel的migration》
一、解决方案简述
在Laravel项目中,当我们需要对数据库结构进行修改时,使用migration(迁移)是一种非常有效且规范的解决方案。它允许我们以一种可追踪、可回滚的方式对数据库表结构进行创建、修改或删除等操作,而不需要直接在数据库中手动编写复杂的SQL语句。
二、创建数据表迁移
1. 创建迁移文件
要创建一个新的数据表迁移,可以使用Artisan命令。例如我们要创建一个名为“users”的数据表:
php
php artisan make:migration create_users_table --create=users
这会在database/migrations目录下生成一个类似20230915123456createuserstable.php的文件。在这个文件中,我们可以定义表结构。
```php
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('emailverifiedat')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
``
up
其中方法用于定义创建表的操作,
down`方法用于定义回滚操作,这里就是删除表。
三、修改现有数据表
1. 添加字段
如果要给已有的“users”表添加一个“age”字段,可以创建新的迁移文件:
php
php artisan make:migration add_age_to_users_table --table=users
然后在生成的迁移文件中:
```php
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class AddAgeToUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('age');
});
}
}
```
2. 修改字段类型
若想将“age”字段从整型改为字符串类型,可以创建如下迁移文件:
php
php artisan make:migration change_age_type_in_users_table --table=users
并在文件中写入:
```php
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class ChangeAgeTypeInUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('age')->nullable()->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('age')->nullable()->change();
});
}
}
```
要执行这些迁移操作,可以在终端运行php artisan migrate
来应用所有未执行的迁移,或者使用php artisan migrate:rollback
来回滚最后一次迁移操作。通过这种方式,可以方便地管理数据库结构变更,确保项目的数据库结构始终保持清晰和可控。
(www.nzw6.com)