我正在尝试使用电子邮件作为我的表的主键,所以我雄辩的代码是 -
我的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
为falsepublic $incrementing = false;这将阻止它认为它是一个自动增量字段.
Laravel Docs - 雄辩 - 定义模型
3> Wader..:您需要设置的模型上有两个属性.第一个
$primaryKey
告诉模型期望主键的列.第二个$incrementing
因此它知道主键不是线性自动递增值.class MyModel extends Model { protected $primaryKey = 'my_column'; public $incrementing = false; }有关详细信息,请参阅Eloquent文档中的
Primary Keys
部分.