Laravel Livewire 动态表单存储时无法附加关联数据问题求助
解决方法
前置配置
- 先确认
Emp_sched模型已经定义好和日程子模型的一对多关联,假设你存储单条日程的模型名为Schedule,子表中含emp_sched_id外键字段:
// app/Models/Emp_sched.php public function schedules() { return $this->hasMany(Schedule::class); }
- 确认
Schedule模型的$fillable属性已经添加所有需要批量赋值的字段:
// app/Models/Schedule.php protected $fillable = ['corsdes', 'c_time', 'day', 'room', 'emp_sched_id'];
修正后的store方法代码
你原有代码的问题是循环内没有触发数据写入操作,也没有将子日程和主记录绑定关联,修改后代码如下:
public function store() { // 数据验证,可根据实际业务调整规则 $validated = $this->validate([ 'faculty_id' => 'required|exists:faculties,id', 'sem' => 'required|integer', 'sy' => 'required|string', 'createScheds' => 'required|array', 'createScheds.*.corsdes' => 'required|string', 'createScheds.*.c_time' => 'required|string', 'createScheds.*.day' => 'required|string', 'createScheds.*.room' => 'required|string', ]); // 写入主表记录 $order = Emp_sched::create([ 'faculty_id' => $validated['faculty_id'], 'sem' => $validated['sem'], 'sy' => $validated['sy'], ]); // 批量写入关联的日程记录,自动绑定主表ID $order->schedules()->createMany($validated['createScheds']); return 'Schedules Saved!'; }
补充说明
如果你需要单条循环写入(比如需要对每条日程做单独处理),可以把createMany部分替换为如下代码,效果完全一致:
foreach ($validated['createScheds'] as $sched) { $order->schedules()->create($sched); }
内容的提问来源于stack exchange,提问作者itsme joe
相关产品推荐
相关产品推荐

