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中文网其他相关文章!