首页  >  文章  >  数据库  >  在 Laravel 5.2 Eloquent 模型中使用自定义字符串主键时如何避免零值?

在 Laravel 5.2 Eloquent 模型中使用自定义字符串主键时如何避免零值?

Barbara Streisand
Barbara Streisand原创
2024-11-26 11:06:13319浏览

How to Avoid Zero Values When Using Custom String Primary Keys in Laravel 5.2 Eloquent Models?

Laravel 5.2:Eloquent 表的自定义主键 - 避免零值

在 Laravel 5.2 中,使用字符串作为 Eloquent 表的自定义主键Eloquent 表可能会导致意外行为:主键的值变为零 (0)。为了解决这个问题,有必要了解 Eloquent 模型属性转换机制的特定方面。

默认情况下,Eloquent 会尝试将特定属性转换为其适当的数据类型。对于自增表,ID 被假定为整数。但是,当使用字符串作为主键时,这种转换会导致键值错误地转换为 0。

要解决此问题,可以采用三种策略:

方法一:禁用增量

在模型类中将 $incrementing 属性设置为 false 表示该表的主键不自动递增。这告诉 Eloquent 不要对主键应用整数转换。

class UserVerification extends Model
{
    protected $primaryKey = 'verification_token';
    public $incrementing = false;
}

方法 2:指定递增键

如果模型的主键是整数,即使它不是自动递增,但将 $incrementing 设置为 false 可能并不合适。相反,使用 $keyType 属性指定主键的数据类型。

class UserVerification extends Model
{
    protected $primaryKey = 'verification_token';
    protected $keyType = 'string';
}

方法 3:显式转换主键

另一种方法是显式转换将主键转换为 Eloquent 查询本身中的字符串。这可确保主键作为字符串处理,无论模型的默认设置如何。

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

以上是在 Laravel 5.2 Eloquent 模型中使用自定义字符串主键时如何避免零值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn