2017-10-06 17 views
0

我有一個數據庫的聯繫人通過API /用戶填充,它能正確收集所有用戶數據到表中。Artisan遷移將不會在控制器中運行

我希望用戶打一個按鈕,得到具有獨特價值(電話和電子郵件),更新聯繫人列表

要做到這一點我想運行一個遷移:刷新每當用戶點擊按鈕#getcontacts,所以它得到一個全新的聯繫人列表更新到最新的插入。

我仍然得到


SQLSTATE [23000]:完整性約束違規:1062重複條目鍵 'contacts_email_unique'

use Artisan 

[...] 



public function makeContacts(){ 

    $apiResponse = file_get_contents($this->userList); //call to the api URL 

    $users = json_decode(
     $this->extractString($apiResponse,9,-1) 
    ); //hard formatting response for my own purposes 

Artisan::call('migrate:refresh', array('--path' => 'app/migrations', '--force' => true)); 

    foreach ($users as $user){ 

     $contact = new Contact(); 
     $contact->firstname = $user->firstname; 
     $contact->lastname = $user->lastname; 
     $contact->email = $user->email; 
     $contact->phone = $user->phone; 
     foreach ($user->zones->zones as $zone){ 
      $contact->zone = $zone->name; 
     } 
     $contact->save(); 

    } 
} 

我注意到:

  1. 叫它在我的功能一開始不會改變任何東西
  2. 件刷新命令作品完美,如果從控制檯叫
  3. 傾銷結果給出了0(我不知道這是什麼意思,其實)

有什麼事要擺脫這個問題的?我的錯誤在哪裏?我真的不明白爲什麼它不會運行命令。語法似乎是正確的壽,謝謝你的幫助!

+0

我想你可能會插入同一組電子郵件兩次,因此出現完整性約束錯誤的原因。你有一個重複的電子郵件條目。爲什麼不在插入之前檢查電子郵件是否存在? –

+0

這就是要點!刷新應該清空我的數據庫每次用戶點擊按鈕來取得聯繫,而不是似乎刷新不會運行在所有 –

+0

這是真的。嘗試運行php artisan migrate:從控制檯刷新並查看它是否有效。如果不是這樣,那也可能是由於你的mysql版本 –

回答