You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 15:27:32