为什么 Laravel Migrations on Windows 会迁移第一个 table 而不是其他的?
Why does Laravel Migrations on Windows migrates the first table but not the others?
例如,我有三个迁移 table(例如用户、角色、部门)需要迁移。在laravel中,只要发出命令就可以了:
php artisan migrate
但是,我使用的是 Windows(cmd/powershell),每次我发出迁移命令时,只有第一个 table 被迁移。如果我尝试重新发出迁移命令,我会收到一条错误消息,指出 "Users table exists"。
我的 laravel 安装有误还是这是正常的?
为了绕过上述错误,我必须重命名每个 table.For 示例,如果我迁移了 "User",那么我需要将用户 table 重命名为:
"create_users_table_2344747474.sql.bak"
以上内容对我来说是必要的,以便于迁移其他 tables,在此示例中 "Role" 和 "Department" 如上所述。
安装技术规格:
更新: 具体错误。说明:如下图所示,"User table" 迁移成功。我可以在 mysql 中看到它。但是,不会迁移其他 table。 Laravel 是 Laravel 框架 5.6.13
更新: 用户 table 迁移。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
这些其他迁移不是 "migrated" 到数据库。
我曾经遇到过类似的问题。这是因为用户 table 中的电子邮件字段,但我通过添加数据长度解决了这个问题,例如:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email', 255)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
然后,php artisan migrate:refresh
。
如果仍然无法正常工作,请打开您的数据库,然后删除所有 table 并再次迁移它。希望这可以帮助您解决问题
你的 mysql 是什么版本?根据文档:如果您 运行 的 MySQL 版本早于 5.7.7 版本或 MariaDB 早于 10.2.2 版本,您可能需要手动配置迁移生成的默认字符串长度以便 MySQL 为它们创建索引。您可以通过在 AppServiceProvider:
中调用 Schema::defaultStringLength 方法来配置它
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
例如,我有三个迁移 table(例如用户、角色、部门)需要迁移。在laravel中,只要发出命令就可以了:
php artisan migrate
但是,我使用的是 Windows(cmd/powershell),每次我发出迁移命令时,只有第一个 table 被迁移。如果我尝试重新发出迁移命令,我会收到一条错误消息,指出 "Users table exists"。
我的 laravel 安装有误还是这是正常的?
为了绕过上述错误,我必须重命名每个 table.For 示例,如果我迁移了 "User",那么我需要将用户 table 重命名为:
"create_users_table_2344747474.sql.bak"
以上内容对我来说是必要的,以便于迁移其他 tables,在此示例中 "Role" 和 "Department" 如上所述。
安装技术规格:
更新: 具体错误。说明:如下图所示,"User table" 迁移成功。我可以在 mysql 中看到它。但是,不会迁移其他 table。 Laravel 是 Laravel 框架 5.6.13
更新: 用户 table 迁移。
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
这些其他迁移不是 "migrated" 到数据库。
我曾经遇到过类似的问题。这是因为用户 table 中的电子邮件字段,但我通过添加数据长度解决了这个问题,例如:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email', 255)->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
然后,php artisan migrate:refresh
。
如果仍然无法正常工作,请打开您的数据库,然后删除所有 table 并再次迁移它。希望这可以帮助您解决问题
你的 mysql 是什么版本?根据文档:如果您 运行 的 MySQL 版本早于 5.7.7 版本或 MariaDB 早于 10.2.2 版本,您可能需要手动配置迁移生成的默认字符串长度以便 MySQL 为它们创建索引。您可以通过在 AppServiceProvider:
中调用 Schema::defaultStringLength 方法来配置它use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}