2017-09-19 53 views
0

首先,我已經找到了這個錯誤,並沒有得到解決方案。我已經加入到我的用戶表的臨牀表clinic_id foranea關鍵,但在做遷移我得到以下errror時:外鍵錯誤,'基表或視圖已經存在'laravel5

[Illuminate\Database\QueryException] 
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists (SQL: create table `users` (`id` int unsigned not null auto_increment primary key, `name` varc 
    har(150) not null, `surnames` varchar(150) not null, `email` varchar(150) not null, `password` varchar(150) not null, `phone` int not null, `clinic_id` int not null, `remember_toke 
    n` varchar(100) null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8mb4 collate utf8mb4_unicode_ci) 


    [PDOException] 
    SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'users' already exists 

2014_10_12_000000_create_clinics_table.php:

public function up() 
{ 

    Schema::create('clinics', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('country'); 
     $table->string('province'); 
     $table->timestamps(); 
    }); 
} 

2014_10_12_000001_create_users_table.php:

public function up() 
{ 


    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('surnames'); 
     $table->string('email')->unique(); 
     $table->string('password'); 
     $table->integer('phone'); 
     $table->integer('clinic_id'); 
     $table->foreign('clinic_id')->references('id')->on('clinics'); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 
} 

我回到了我的項目的前一個版本,我得到的錯誤沒有再出來,現在顯然它使一切正確,但仍然不會將外地添加到表的用戶,我試過它像這樣:

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->string('surnames'); 
     $table->string('email')->unique(); 
     $table->string('password'); 
     $table->integer('clinic_id'); 
     $table->foreign('clinic_id')->references('id')->on('clinics'); 
     $table->rememberToken(); 
     $table->timestamps(); 
    }); 

} 

和這樣;

public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('surnames'); 
      $table->string('email')->unique(); 
      $table->string('password'); 

      $table->rememberToken(); 
      $table->timestamps(); 
     }); 
     Schema::table('users', function (Blueprint $table) { 
     $table->integer('clinic_id'); 
     $table->foreign('clinic_id')->references('id')->on('clinics'); 
    }); 
    } 

回答

1

您想添加到現有表中,而不是創建新表。所以,你只需要只列出你要添加的列,並使用table,而不是create

public function up() 
{ 
    Schema::table('users', function (Blueprint $table) { 
     $table->integer('clinic_id'); 
     $table->foreign('clinic_id')->references('id')->on('clinics'); 
    }); 
} 
+0

我刪除了表格,然後再次遷移並得到相同的錯誤... – jlgf

+0

您有多個用戶表的遷移嗎? – aynber

+0

我只有一個遷移到用戶......這是非常罕見的 – jlgf

0

的信息似乎很清楚,你要創建一個已經存在的表,嘗試運行:

php artisan migrate:rollback 

如果這不起作用它可能是你回滾,但錯過了放棄表,把它放下手。如果你嘗試添加一個列,你做錯了,你需要調用現有的表並附加新的列。

Schema::table('users', function (Blueprint $table) { 
     $table->integer('clinic_id'); 
     ... 
    }); 

編輯: 如果你爲了創建身份驗證系統,那麼你已經一個users表遷移,如果你沒有,那麼,試圖創建一個名爲users新表的問題,使用php artisan make:auth因爲你使用以下內容:

Schema::create('users', function (Blueprint $table) { 
     });//This is just for creating a new users table 

如果你想創建在用戶表中的新列,那麼你需要做以下遷移:

Schema::table('users', function (Blueprint $table) { 
    });// See the difference?, create/table 

如果您不想讓自己複雜化,只需刪除剛剛創建的用戶模型的遷移並將列添加到原始users遷移。

+0

我刪除了表格,然後再次遷移並得到相同的錯誤... – jlgf

+0

好吧,我想你有兩個用戶表的遷移,你可以在第一次遷移時添加你需要的列,並刪除新的列,或者保留第一次遷移並編輯新列,以便添加新列, Schema :: create用於創建表格,Schema :: table用於檢索已創建的表格並根據需要進行編輯 –

+0

我只有一個遷移到用戶......這非常罕見 – jlgf

相關問題