问题是我有这个错误:
[PDOException]
SQLSTATE [42S01]:基表或视图已存在:1050表'歌曲'已存在
这是我的迁移文件:
private String convertChoice(String abbr)
{
if (abbr.equals("T")) return "Stone";
else if (abbr.equals("S")) return "Scissors";
else return "Paper";
}
我认为解决方案只是删除表然后再次运行迁移,那么如何使用命令行在Laravel 5中删除表?我正在使用MySQL。
答案 0 :(得分:33)
要删除表,可以使用Schema :: drop方法:
Schema::drop('users');
// Better
Schema::dropIfExists('users');
答案 1 :(得分:15)
要在laravel中删除表,请创建第一个迁移
逐步删除表格
$ php artisan make:migration drop_user_table
将其添加到向上功能Schema::drop('tableName');
$ php artisan migrate
答案 2 :(得分:7)
删除现有表的好方法,可以使用drop或dropIfExists方法:
Schema::drop('users');
Schema::dropIfExists('users');
如果您要删除最后一个迁移表,也可以回滚
php artisan migration:rollback
migrate:reset命令将回滚您应用程序的所有迁移:
php artisan migrate:reset
migrate:fresh命令将从数据库中删除所有表,然后执行migration命令:
php artisan migrate:fresh
php artisan migrate:fresh --seed
答案 3 :(得分:6)
您需要在迁移时使用down方法,以便在运行php artisan migrate:rollback
时可以删除数据库。
e.g。
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateSongsTable extends Migration
{
public function up()
{
Schema::create('songs', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->string('slug')->unique();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
}
public function down()
{
Schema::drop('songs');
}
}
答案 4 :(得分:1)
删除表并再次运行迁移的简单方法。只需运行artisan命令。
php artisan migrate:fresh
或者如果您有表的种子,则运行此命令
php artisan migrate:fresh --seed
答案 5 :(得分:0)
您可以这样运行 php artisan db:wipe
,如果您在迁移时忘记了 down()
方法,您将强制 laravel 删除所有表,而不管外键约束或类似情况。
如果您的迁移没有 down()
方法,回滚将不起作用。
您也可以使用 php artisan migrate:fresh
这将强制删除所有表,然后将运行所有迁移
答案 6 :(得分:-19)
我发现一个很简单的方法就是使用phpmyadmin并手动删除表。当然,如果再次运行迁移时仍然存在迁移,则将再次创建表。