2017-01-16 6 views
0

Я пытаюсь добавить систему комментариев в своем приложении для блогов, но я получаю эту ошибку при попытке выполнить миграцию комментариев, которая, похоже, не имеет никакого отношения к моему текущему файлу миграции comments, но предыдущий файл post_tag миграцияОшибка при запуске команды php artisan migrate

[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'); 
} 
} 

и это мой post_tag миграции файл

<?php 

2016_12_18_230831_create_post_tag_table.php 

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

class CreatePostTagTable extends Migration 
{ 
/** 
* Run the migrations. 
* 
* @return void 
*/ 
public function up() 
{ 
    Schema::create('post_tag', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->integer('post_id')->unsigned(); 
     $table->foreign('post_id')->references('id')->on('posts'); 
     $table->integer('tag_id')->unsigned(); 
     $table->foreign('tag_id')->unsigned(); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('post_tag'); 
} 
} 

Как избавиться от этой ошибки или чего я здесь не хватает?

ответ

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');. Это может зависеть от вашей ситуации. В большинстве случаев вам это не нужно.

+0

Спасибо, что сработало –

1

Вам придется вручную удалить таблицу в MySQL:

mysql> drop table post_tag; 

Затем запустите миграцию снова

php artisan migrate 
+0

Я попытался сделать так, как вы предложили, теперь я получаю сообщение об ошибке '[Illuminate \ Database \ QueryException] SQLSTATE [42000]: Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверьте, что соответствует версии сервера MariaDB для правильного синтаксиса для использования рядом с ')' в строке 1 (SQL: alter table 'post_ tag' добавить ограничение' post_tag_tag_id_foreign' external key ('tag_id') ссылки' '()) ' –

+0

, если в базе данных нет данных о производстве, и проект находится в разработке, вам лучше отказаться от всей базы данных, создав ее, внося изменения, предложенные Гайаном ниже, а затем выполнив миграцию php artisan. – Paras

0

Я думаю, вы должны попробовать это:

Drop table post_tag; 

И

Удалить post_tag миграции из таблицы кочевок

После запуска миграции

php artisan migrate 

Надеюсь, что эта работа для вас!