Laravel 5.2 - 将主键设置为电子邮件而不是' id'

时间:2016-05-30 13:14:12

标签: javascript php ajax laravel laravel-5.2

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

以上是我的数据库架构。

以下是我的用户型号

<?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'
    ];
} 

现在我的问题是我想制作电子邮件&#39;属性作为users表中的主键。但是我得到了

的错误
  

QueryException SQLState [42S01]。

我该如何解决?

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

主键用于链接到其他表,字符串比较比int比较慢。

如果将用户信息存储在多个表中,则users表的外键将是电子邮件地址。

这意味着您多次存储电子邮件地址。 因此,不使用电子邮件作为主键,而是使用自动递增的主键。

答案 1 :(得分:0)

在您的用户架构中:

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

在需要用户

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

您在索引字段上有外键。无需在Users表的此字段上使用主键。

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