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

Laravel模型配置布尔类型转换后仍输出整数的解决方法

Laravel布尔字段输出为1/0而非true/false解决办法

你配置的casts其实已经生效,问题出在PHP的原生输出规则:当使用echo输出布尔值时,true会自动转为字符串1,false会自动转为空字符串,所以页面上显示为整数形式,并非casts配置失效,你可以用var_dump($clocks->timerAmended)验证,拿到的实际是布尔类型。

解决方案

根据你的使用场景二选一即可:

  • 仅单处需要输出true/false字符串,直接在输出时做判断,修改对应代码行:
echo 'timer amended? ' . ($clocks->timerAmended ? 'true' : 'false') . '<br />';
  • 全局所有调用timerAmended属性的场景都返回true/false字符串,将现有casts配置替换为访问器即可,在clocks模型中添加如下代码:
public function getTimerAmendedAttribute($value)
{
    return $value ? 'true' : 'false';
}

额外优化建议

你现有代码还有两处可优化的点:

  1. 已经在模型中定义了user关联,不需要手动查询用户表,直接通过关联属性就能拿到用户数据,原有代码里的$user = User::where('id', '=', $clocks->user_id)->first();可以直接删除,输出用户名的行修改为echo 'User: ' . $clocks->user->name . '<br />';即可,能减少一次不必要的SQL查询。
  2. 当前用Clock::find($user_id)查询记录,find方法默认匹配的是表的主键id,如果你的clocks表主键不是user_id,这个查询逻辑存在错误,应该修改为Clock::where('user_id', $user_id)->first()才能正确获取对应用户的打卡记录。

内容的提问来源于stack exchange,提问作者Beaumont

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:33:01