如何在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
相关产品推荐
相关产品推荐

