Laravel用户模型isEnabled方法对正整数始终返回true问题
问题原因及解决办法
问题原因
你在模型的$casts中已经将enabled字段指定为boolean类型,Laravel会自动把MySQL里tinyint类型的所有非零值(不管是1、2还是其他正整数)转换成布尔值true,零值则转为false。
而你的isEnabled()方法用$this->enabled == 1做判断,PHP中布尔值true和整数1做松散比较(==)时结果恒为true,所以只要数据库里的enabled是正整数,方法都会返回true。
解决办法
根据业务需求选择以下方案:
方案一:利用已有类型转换(推荐)
既然已经配置了boolean类型转换,直接返回转换后的布尔值即可,完全符合布尔字段的逻辑(非零为启用,零为禁用):public function isEnabled(): bool { return $this->enabled; }方案二:严格判断等于1
如果你需要严格区分enabled等于1和其他正整数的情况,可以取消$casts里的enabled配置,或者在方法中获取字段原始值进行比较:// 取消类型转换后直接比较 public function isEnabled(): bool { return $this->enabled == 1; } // 保留类型转换,获取数据库原始值比较 public function isEnabled(): bool { return $this->getOriginal('enabled') == 1; }
内容的提问来源于stack exchange,提问作者vijay C
相关产品推荐
相关产品推荐

