例如,我需要迁移三个迁移表(例如,用户,角色,部门)。在laravel中,它就像发出命令一样简单:
php artisan migrate
但是,我使用的是Windows(cmd / powershell),每次发出migrate命令时,只会迁移第一个表。如果我尝试重新发出migrate命令,则会收到一条错误,指出“Users表存在”。
我的laravel安装中是否有错误或这是正常的吗?
为了绕过上述错误,我必须重命名每个表。例如,如果我迁移了“User”,那么我需要将User表重命名为:
"create_users_table_2344747474.sql.bak"
上面对我来说是必要的,以便于其他表的迁移,在本例中“角色”和“部门”如上所述。
更新:特定错误。说明:如下所示,“用户表”已成功迁移。我可以在mysql中看到它。但是,其他表不会迁移。 Laravel Laravel Framework 5.6.13
更新:用户表迁移。
<?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');
}
}
这些其他迁移不会“迁移”到数据库中。
答案 0 :(得分:1)
你的mysql版本是什么?根据文档:如果您运行的是早于5.7.7版本的MySQL版本或早于10.2.2版本的MariaDB,您可能需要手动配置迁移生成的默认字符串长度,以便MySQL为其创建索引他们。您可以通过在AppServiceProvider中调用Schema :: defaultStringLength方法来配置它:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
答案 1 :(得分:0)
我遇到了同样的问题..这是因为用户表中的电子邮件字段,但我通过添加数据长度来解决它:
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
。
如果仍然无法正常工作,请打开您的数据库,然后删除所有表格并再次迁移..希望这可以帮助您解决问题