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

如何在Laravel Blade的JavaScript代码中调用Accessor?

解决方案

步骤1:让Accessor数据自动包含在模型JSON输出中

Laravel模型的Accessor默认不会自动加入到模型的数组/JSON输出里,你需要在对应模型中添加$appends属性,把day_info加入进去:

class YourModel extends Model
{
    // 其他模型配置...

    protected $appends = ['day_info'];

    // 你的Accessor方法
    public function getDayInfoAttribute()
    {
        $fromDate = $this->program->from_date;
        $toDate = $this->program->to_date;
        $period = CarbonPeriod::create($fromDate, $toDate);
        $days = [];
        foreach ($period as $p) {
            $day = verta($p)->formatWord('l');
            $dayOfWeek = verta($p)->dayOfWeek;
            $days[$dayOfWeek]=[
                'id' => $dayOfWeek,
                'day' => $day,
                'date' => $p->format('Y-m-d')
            ];
        }
        return $days;
    }
}

步骤2:正确在JavaScript中访问day_info数据

你的day_info返回的是以星期数字为键的对象,每个键对应包含id、day、date的子对象,不能直接用fields.day_info['id']访问,以下是几种常见场景的写法:

场景1:遍历所有日期数据

<script>
    let fields = @json($prgFields);
    
    // 遍历所有日期条目
    for (const key in fields.day_info) {
        const dayData = fields.day_info[key];
        console.log('ID:', dayData.id);
        console.log('星期:', dayData.day);
        console.log('日期:', dayData.date);
    }
</script>

场景2:访问指定星期的特定数据

比如获取dayOfWeek为1的日期数据(注意verta的dayOfWeek返回值范围,根据实际情况调整):

<script>
    let fields = @json($prgFields);
    
    const targetDay = fields.day_info[1];
    if (targetDay) {
        console.log(targetDay.id, targetDay.day, targetDay.date);
    }
</script>

场景3:转为数组形式遍历

如果需要把对象转为数组方便操作:

<script>
    let fields = @json($prgFields);
    
    const dayArray = Object.values(fields.day_info);
    dayArray.forEach(dayData => {
        console.log(dayData.id, dayData.day, dayData.date);
    });
</script>

额外提示

  • 确保$prgFields是模型实例或包含该Accessor数据的集合/数组,如果是集合,每个元素都会带有day_info属性。
  • 提前确认verta扩展的dayOfWeek返回值范围,避免访问不存在的键导致undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:31:35