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

预约取消后如何关联两个SQL表更新Timeslot的可用状态?

解决方案

首先确认Reservation表与Timeslot表的关联关系:从你的数据库结构来看,Reservation表中存在timeslot_id字段(作为关联Timeslot表的外键),通过这个字段就能定位到对应的时段记录。

步骤1:确保模型关联(可选但推荐)

在Reservation模型中定义与Timeslot的关联,让操作更直观:

// app/Models/Reservation.php
public function timeslot()
{
    return $this->belongsTo(Timeslot::class);
}

步骤2:修改destroy方法实现状态更新

在删除预约记录的同时,找到对应Timeslot并将其状态改为0(可预约),建议用事务保证操作原子性,避免数据不一致:

use Illuminate\Support\Facades\DB;

public function destroy($id, Request $request)
{
    DB::beginTransaction();
    try {
        // 获取目标预约记录(找不到时直接抛出异常)
        $reservation = Reservation::findOrFail($id);
        
        // 更新对应Timeslot的状态为可预约(0)
        Timeslot::where('id', $reservation->timeslot_id)->update(['status' => 0]);
        
        // 删除预约记录
        $reservation->delete();
        
        DB::commit();
        return redirect()->route('my.appointment')->with('message', 'Appointment has been cancelled successfully');
    } catch (\Exception $e) {
        DB::rollBack();
        return redirect()->route('my.appointment')->with('error', 'Failed to cancel appointment');
    }
}

关键注意点

  • 若未使用模型关联,直接通过$reservation->timeslot_id也能完成定位,核心逻辑不变
  • 需确保Timeslot模型的$fillable属性包含status字段,否则Laravel的批量赋值保护会拦截更新操作:
// app/Models/Timeslot.php
protected $fillable = ['date', 'start_time', 'end_time', 'status']; // 必须包含status

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:45:34