运行php artisan migrate命令时出错

时间:2017-01-16 21:39:37

标签: php laravel mariadb laravel-5.3 database-migration

我正在尝试在我的博客应用程序上添加评论系统但是在尝试运行评论迁移时出现此错误,这似乎与我当前的 [HttpGet("/find/{searchTerm}", Name = "FindProductTypes")] public IActionResult FindProductTypes(string searchTerm) { IEnumerable<ProductType> _productTypes = _productTypeRepository .GetAll().Where(pt => pt.name.Contains(searchTerm)); return Ok(_productTypes); } 迁移文件无关,而是之前的{{1迁移文件

comments

这是我的post_tag迁移文件

[Illuminate\Database\QueryException]
SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'post_tag' already exists (SQL:
    create table `post_tag` (
      `id` int unsigned not null  auto_increment primary key,
      `post_id` int unsigned not null, 
      `tag_id` int unsigned not null
    ) default character set utf8 collate utf8_unicode_ci) 

这是我的comments迁移文件

<?php

//2017_01_16_101128_create_comments_table.php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateCommentsTable extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('comments', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email');
        $table->text('comment');
        $table->boolean('approved');
        $table->integer('post_id')->unsigned();
        $table->timestamps();

    });

    Schema::table('comments', function($table){
            $table->foreign('post_id')->references('id')->on('posts')->
                     onDelete('cascade');
        });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropForeign(['post_id']);
    Schema::drop('comments');
}
}

我如何摆脱这个错误或我在这里错过了什么?

3 个答案:

答案 0 :(得分:1)

您必须手动删除mysql中的表:

mysql> drop table post_tag;

然后再次运行迁移

php artisan migrate

答案 1 :(得分:1)

CreatePostTagTable迁移中,您可能不会更改

$table->integer('tag_id')->unsigned();
$table->foreign('tag_id')->unsigned();

$table->integer('tag_id')->unsigned();
$table->foreign('tag_id')->references('id')->on('tag');

有重复。

然后手动删除post_tag表。它可以再次创建。您可能还想检查数据库中的migration表,因为可能有记录。 post_tag表。如果是这样,将其删除然后你可以安全地运行迁移。

此外,由于您要创建pivot table,因此您可能不需要$table->increments('id');。这可能取决于你的情况。在大多数情况下,你不需要它。

答案 2 :(得分:0)

我想你应该试试这个:

Drop table post_tag;

迁移表中删除post_tag 迁移

运行迁移后

php artisan migrate

希望这对你有用!