2016-05-30 64 views
1
Schema::create('users', function (Blueprint $table) {<br> 
      $table->primary('email');<br> 
      $table->string('name');<br> 
      $table->string('image_url');<br> 
      $table->string('signin_with');<br> 
     }); 

以上是我的數據庫模式。Laravel 5.2 - 將主鍵設爲電子郵件而不是'id'

這是我的用戶模型

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Users extends Model 
{ 

    protected $table = 'users'; 
    public $incrementing = false; 
    protected $primaryKey = 'email'; 

    protected $fillable = [ 
     'email', 'name' ,'image_url', 'signin_with' 
    ]; 
} 

現在我的問題是我想使'email'屬性成爲用戶表中的主鍵。但我得到一個錯誤

QueryException SQLState [42S01]。

我該如何解決?

謝謝您提前。

+0

您可能不想將電子郵件設置爲「主鍵」。很可能你希望將它設置爲'unique'併爲其添加'index',因爲主鍵也用於增量目的。 – Peon

+0

我可能是錯的,但是SQLState [42S01]向我建議表已經存在。你能發佈完整的錯誤信息嗎? – jeroen

+0

我不希望電子郵件ID爲空,因爲我可以將其分配給「唯一」,那麼它將只是該表中的電子郵件的一個條目,但它也可以是空的,我不想要的東西。我需要在其他表中的電子郵件ID作爲「外鍵」和「組合鍵」。 該錯誤是 [照亮\數據庫\ QueryException] SQLSTATE [42S01]:基表或視圖已經存在:1050 –

回答

0

主鍵用於鏈接到其他表和字符串比較比int比較慢。

如果您將用戶信息存儲在多個表中,users表的外鍵將是電子郵件地址。

這意味着您多次存儲電子郵件地址。 因此,而不是使用電子郵件作爲主鍵使用自動遞增的主鍵。

+0

是..我的電子郵件存儲在表中,因爲電子郵件ID將在其他表的使用和基於我們的要求電子郵件ID應該是主鍵。那我該如何解決呢? –

0

在用戶模式:

$table->increments('id'); 
$table->string('email')->unique(); 

在需要用戶

$table->integer('user_id')->unsigned(); 
$table->foreign('user_id')->references('id')->on('users'); 

你必須對索引字段外鍵的一些模型。用戶表不需要在該字段上具有主鍵。

基於https://laravel.com/docs/5.2/migrations#creating-indexes

相關問題