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

能否在Laravel的::get查询中使用PHP date()将星期数字转为星期名称

你当前的实现方式不可行,原因如下:

  • PHP 函数会在SQL查询发起前就执行完成,你直接把date('l', strtotime('day_of_week'))写在查询字段参数里,PHP只会解析一次字符串'day_of_week',无法拿到数据库中每条记录的day_of_week字段值,最终只会返回固定的无效值,不会动态对应每条记录的星期数字。

推荐两种正确实现方案

方案1:用SQL原生函数在查询阶段处理(以MySQL为例)

使用selectRaw执行SQL原生的日期转换逻辑,直接返回格式化后的星期名称:

DeliveryOptions::selectRaw("DAYNAME(STR_TO_DATE(day_of_week, '%w')) AS day_of_week, delivery_slot_hour_start, delivery_slot_hour_end")
    ->get();

如果你的数据库是PostgreSQL,可以替换为TO_CHAR(day_of_week::int, 'FMDay')实现同样效果。

方案2:用Laravel访问器在模型层处理(更灵活)

不需要修改查询逻辑,直接在DeliveryOptions模型中定义访问器,自动关联转换:

// 在DeliveryOptions模型中添加以下方法
public function getDayOfWeekNameAttribute()
{
    // 可根据需求调整为中文星期名,比如0=>'周日'
    $weekMap = [
        0 => 'Sunday',
        1 => 'Monday',
        2 => 'Tuesday',
        3 => 'Wednesday',
        4 => 'Thursday',
        5 => 'Friday',
        6 => 'Saturday',
    ];
    return $weekMap[$this->day_of_week] ?? '';
}

查询时正常拉取字段即可,后续直接通过模型实例的day_of_week_name属性拿到星期名:

$options = DeliveryOptions::get(['day_of_week', 'delivery_slot_hour_start', 'delivery_slot_hour_end']);
// 访问方式:$options[0]->day_of_week_name

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:24:02