laravel中的迁移文件用于在数据库中创建表,对吧?但是,当我尝试迁移时,它给了我这个错误:
C:\ xampp \ htdocs \ app> php artisan migrate
[照亮\数据库\ QueryException] SQLSTATE [42S01]:基表或视图已存在:1050表'用户'已存在(SQL:create table
users
(id
int unsigned not null auto_increment primary key,name
varchar(255)not null,password
varchar(255)not null,remember_token
varchar(100)null,created_at
timestamp null,updated_at
tim estamp null)默认字符集utf8mb4 collate utf8mb4_unicode_ci)[PDOException] SQLSTATE [42S01]:基表或视图已存在:1050表'用户'已存在
我创建了一个新的迁移文件,它名为test。我知道用户已经存在,但我想创建我创建的新表,称为test。
这是我将用于创建我的表但不会创建的迁移文件:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateTestsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->increments('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tests');
}
}
这是用户迁移文件,告诉我它存在:
<?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');
}
}
这是密码迁移文件:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
这里是我没有谈过的假人迁移文件,因为我认为这不是问题:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateDummiesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('dummies', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('body');
$table->timestamp('date'); //if you dont put name for the timestamp it will create: create_at and update_at fields.
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('dummies');
}
}
抱歉让你们等着我花了很长时间才找到编辑按钮并修复我的代码间距。这是我第一次使用stack over flow。
答案 0 :(得分:1)
数据库中的migrations
表与数据库的其余部分不同步。 Laravel正在尝试重新运行迁移以创建users
表并失败。
如果这是一个全新的项目,您可以从数据库中删除所有表并重新运行所有迁移。或者,修复迁移表,以便准确反映数据库的状态。
答案 1 :(得分:0)
在laravel / app / providers / AppServiceProvider.php中 在boot
中添加以下代码Schema::defaultStringLength(191);
然后尝试php artisan migrate:refresh
或最佳
删除所有表格并再次运行php artisan migrate
答案 2 :(得分:0)
在所有表的up函数()的开头添加以下代码
public function up()
{
// Add this line
Schema::dropIfExists('users');
// from you down method
Schema::create('users', function (Blueprint $table) {
...........
});
}
答案 3 :(得分:0)
试试这个......
*// AppServiceProvider.php
use Illuminate\Support\Facades\Schema;
function boot()
{
Schema::defaultStringLength(191);
}
*