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

标签 php mysql laravel laravel-5 eloquent

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

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserVerification extends Model
{
    protected $table = 'user_verification';
    protected $fillable =   [
                                'email',
                                'verification_token'
                            ];
    //$timestamps = false;
    protected $primaryKey = 'verification_token';
}

我的数据库是这样的-

enter image description here

但如果我这样做-

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"
}

所以,验证 token /主键变为0。

有人可以帮忙吗?

最佳答案

这是 added to the upgrade documentation on Dec 29, 2015 ,所以如果你之前升级过,你可能会错过它。

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

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

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

所以解决办法是:

class UserVerification extends Model
{
    // if your key name is not 'id'
    // you can also set this to null if you don't have a primary key
    protected $primaryKey = 'your_key_name';

    public $incrementing = false;

    // In Laravel 6.0+ make sure to also set $keyType
    protected $keyType = 'string';
}

关于php - Laravel 5.2 - 使用字符串作为 Eloquent 表的自定义主键变为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582535/

相关文章:

php - 在 session 中添加 ID?

php - 在 Laravel 构造函数中将模型链接到父级

php - 在 laravel 中通过 url 传递变量

Laravel Gates,如何在 API 路由中使用它们?

PHP 7.4.1 未捕获错误 : Call to undefined function mysqli_connect()

php - 为什么我的正则表达式组量词不起作用?

php - 使用 XmlHttpRequest 传递请求值

php - 基于两个下拉菜单显示数据库结果

MySQL Schema DBAdmins 你能看看这个吗?

mysql - 在 $catalina_home/lib 中带有 mysql 驱动程序的 maven tomcat 插件