如何在Laravel中放桌子?

时间:2015-07-05 10:05:02

标签: laravel-5

问题是我有这个错误:

  

[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。

7 个答案:

答案 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

参考:Laravel Documentation

答案 5 :(得分:0)

您可以这样运行 php artisan db:wipe,如果您在迁移时忘记了 down() 方法,您将强制 laravel 删除所有表,而不管外键约束或类似情况。

如果您的迁移没有 down() 方法,回滚将不起作用。

您也可以使用 php artisan migrate:fresh 这将强制删除所有表,然后将运行所有迁移

答案 6 :(得分:-19)

我发现一个很简单的方法就是使用phpmyadmin并手动删除表。当然,如果再次运行迁移时仍然存在迁移,则将再次创建表。