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

新手上路,请多包涵

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

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

我的数据库是这样的-

在此处输入图像描述

但如果我这样做——

 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。

有人可以帮忙吗?

原文由 Abrar Jahin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 351
2 个回答

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

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

默认情况下,对于自动递增表,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';
}

原文由 andrewtweber 发布,翻译遵循 CC BY-SA 4.0 许可协议

我正在使用 Postman 来测试我的 Laravel API。

我收到一个错误,指出

“SQLSTATE[42S22]: Column not found: 1054 Unknown column”,因为 Laravel 试图自动创建两列“created_at”和“updated_at”。

我必须在我的模型中输入 public $timestamps = false; 。然后,我再次使用 Postman 进行测试,发现在我的数据库中创建了一个 "id" = 0 变量。

我最后不得不添加 public $incrementing false; 来修复我的 API。

原文由 Erich Meissner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题