laravel 5.4 - php artisan migrate 命令不起作用
laravel 5.4 - php artisan migrate command doesn't work
我有四个迁移文件,当我在命令行中 运行 php artisan migrate
时,它说:
Nothing to migrate
我也试过 php artisan migrate --database=vcp
:
Database [vcp] not configured.
我在 .env
文件中使用了另一个数据库并再次 运行 php artisan migrate
命令:
Migration table created successfully.
Nothing to migrate.
运行宁
php artisan migrate:refresh
、php artisan migrate:reset
、php artisan migrate:status
、php artisan migrate --path="database/migrations/migration_file"
这些消息
Nothing to rollback.
Nothing to migrate.
No migrations found
和
composer dump-autoload or composer update
没有帮助。
这是我的 .env
文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=vcp
DB_USERNAME=root
DB_PASSWORD=secret
我的2017_05_10_201750_add_columns_to_users.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddColumnsToUsers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('status')->default('online');
$table->string('api_token');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('status');
$table->dropColumn('api_token');
});
}
}
请帮忙!
正如您在上述评论中所述,The changes are done directly on database
。那么 Nothing to migrate.
是正确的。
尝试理解这个概念,迁移包含文件中的 table 结构,当您 运行 迁移时,这些 table 是在数据库中创建的。当您在迁移文件中进行更改时,您必须再次 运行 迁移,以便这些更改反映回数据库 table。所以流程是:
migration file -> database table
没有
database table -> migration file
以下是对我有用的方法:
首先,删除所有数据库 table,包括迁移 table。
其次,您的 AddColumnsToUsers 文件的更新方法 up() 如下所示:
public function up()
{
DB::beginTransaction();
try {
Schema::table('users', function (Blueprint $table) {
$table->string('status')->default('online');
$table->string('api_token');
});
DB::commit();
} catch (PDOException $e) {
DB::rollBack();
$this->down();
}
}
这将检查您的数据库以查看 table 是否已经存在,如果不存在则创建 table,如果存在则回滚。
让我知道这是否有效。
有时您会像我一样手动编写 Migration 函数,复制并粘贴一个旧函数,然后手动更改文件名。
前任:
文件 2021_10_13_082805_insert_fields_pages_table.php
如果情况相同,请注意 class 名称,它必须包含反映文件名的名称。
在这个例子中:
class InsertFieldsPagesTable extends Migration
如果您忘记更改 class 名称,迁移将什么也不做。
我有四个迁移文件,当我在命令行中 运行 php artisan migrate
时,它说:
Nothing to migrate
我也试过 php artisan migrate --database=vcp
:
Database [vcp] not configured.
我在 .env
文件中使用了另一个数据库并再次 运行 php artisan migrate
命令:
Migration table created successfully.
Nothing to migrate.
运行宁
php artisan migrate:refresh
、php artisan migrate:reset
、php artisan migrate:status
、php artisan migrate --path="database/migrations/migration_file"
这些消息
Nothing to rollback.
Nothing to migrate.
No migrations found
和
composer dump-autoload or composer update
没有帮助。
这是我的 .env
文件
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=vcp
DB_USERNAME=root
DB_PASSWORD=secret
我的2017_05_10_201750_add_columns_to_users.php
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddColumnsToUsers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('status')->default('online');
$table->string('api_token');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('status');
$table->dropColumn('api_token');
});
}
}
请帮忙!
正如您在上述评论中所述,The changes are done directly on database
。那么 Nothing to migrate.
是正确的。
尝试理解这个概念,迁移包含文件中的 table 结构,当您 运行 迁移时,这些 table 是在数据库中创建的。当您在迁移文件中进行更改时,您必须再次 运行 迁移,以便这些更改反映回数据库 table。所以流程是:
migration file -> database table
没有
database table -> migration file
以下是对我有用的方法:
首先,删除所有数据库 table,包括迁移 table。 其次,您的 AddColumnsToUsers 文件的更新方法 up() 如下所示:
public function up()
{
DB::beginTransaction();
try {
Schema::table('users', function (Blueprint $table) {
$table->string('status')->default('online');
$table->string('api_token');
});
DB::commit();
} catch (PDOException $e) {
DB::rollBack();
$this->down();
}
}
这将检查您的数据库以查看 table 是否已经存在,如果不存在则创建 table,如果存在则回滚。 让我知道这是否有效。
有时您会像我一样手动编写 Migration 函数,复制并粘贴一个旧函数,然后手动更改文件名。 前任: 文件 2021_10_13_082805_insert_fields_pages_table.php 如果情况相同,请注意 class 名称,它必须包含反映文件名的名称。 在这个例子中:
class InsertFieldsPagesTable extends Migration
如果您忘记更改 class 名称,迁移将什么也不做。