Laravel中如何获取fill方法生成的$app实例ID?
问题解决:Laravel多步骤表单中中间表appointment_id为null的问题
问题核心在于你仅用fill()填充了Appointment实例的属性,但未将其保存到数据库,未持久化的模型实例不会生成自增ID,因此$app->id返回null。
修正后的代码示例
// 先创建并保存Appointment实例到数据库,自动获取ID $app = Appointment::create($validatedData); // 基于已保存的Appointment实例创建中间表数据 AppointmentService::create([ 'appointment_id' => $app->id, 'service_id' => $service_app ]); // 将带ID的实例存入session,供后续步骤使用 $request->session()->put('app', $app);
进阶优化(推荐)
如果Appointment和Service是多对多关联,建议在Appointment模型中定义关联关系,直接通过关联方法操作中间表:
// Appointment模型中添加关联 public function services() { return $this->belongsToMany(Service::class, 'appointment_services'); }
之后无需手动实例化AppointmentService,直接通过关联方法创建中间表数据:
$app = Appointment::create($validatedData); // attach方法自动维护中间表的appointment_id和service_id $app->services()->attach($service_app);
这种写法更贴合Laravel的关联设计规范,也能避免手动赋值可能出现的疏漏。
内容的提问来源于stack exchange,提问作者Sharmae Reyes
相关产品推荐
相关产品推荐

