当前位置:  开发笔记 > 编程语言 > 正文

Laravel 5.2 - 使用字符串作为Eloquent Table的自定义主键变为0

如何解决《Laravel5.2-使用字符串作为EloquentTable的自定义主键变为0》经验,为你挑选了3个好方法。

我正在尝试使用电子邮件作为我的表的主键,所以我雄辩的代码是 -



我的DB就像这样 -

在此输入图像描述

但如果我这样做 -

UserVerification::where('verification_token', $token)->first();

我得到这个 -

{
  "email": "sdfsdf@sdfsdf.sdf",
  "verification_token": 0,
  "created_at": "2016-01-03 22:27:44",
  "updated_at": "2016-01-03 22:27:44"
}

因此,验证令牌/主键变为0.

有人可以帮忙吗?



1> andrewtweber..:

这已添加到2015年12月29日的升级文档中,因此如果您在此之前升级,则可能错过了它.

从模型中获取任何属性时,它会检查该列是否应该转换为整数,字符串等.

默认情况下,对于自动递增表,此方法中的ID假定为整数:

https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L2790

所以解决方案是:

class UserVerification extends Model
{
    protected $primaryKey = 'your_key_name'; // or null

    public $incrementing = false;
}


@MubasharAbbas你的模型必须与Eloquent相匹配.现在,为什么Eloquent会使`$ incrementing` public和`$ primaryKey`受到保护?这很随意.我猜测`$ incrementing`在早期版本的Eloquent中没有getter或setter方法(现在确实如此),他们只是不想在添加它们之后进行重大更改
有没有理由为`$ incrementing`字段是公共的而不是受保护的?

2> lagbox..:

在模型设置$incrementing为false

public $incrementing = false;

这将阻止它认为它是一个自动增量字段.

Laravel Docs - 雄辩 - 定义模型



3> Wader..:

您需要设置的模型上有两个属性.第一个$primaryKey告诉模型期望主键的列.第二个$incrementing因此它知道主键不是线性自动递增值.

class MyModel extends Model
{
    protected $primaryKey = 'my_column';

    public $incrementing = false;
}

有关详细信息,请参阅Eloquent文档中的Primary Keys部分.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有