我正在尝试使用电子邮件作为我表的主键,所以我 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';
}
我的数据库是这样的-
但如果我这样做-
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/