Laravel预订表单提交后,如何将主用户信息同步至关联记录?
解决预订记录同步主用户信息的问题
提交的预订表单内容
How many book : 2 Name : a email : a@gmail.com email#1 : b@gmail.com
当前数据库存储结果
ID : 1 Name : a Email : a@gmail.com Other email : NULL ID : 2 Name : NULL Email : NULL Other email : b@gmail.com
期望的数据库存储结果
ID : 2 Name : a Email : a@gmail.com Other email : b@gmail.com
现有代码
控制器代码
$firstName = $booking->first_name; $lastName = $booking->last_name; foreach ($request->input('other_emails') as $email){ Booking::create([ 'first_name'=>$firstName, 'last_name'=>$lastName, 'other_emails'=>$email ]); Mail::to($email)->send(new OthersEmail($isi_email1)); }
模型代码
protected $fillable = [ 'first_name', 'last_name', 'other_emails' ];
修改方案
1. 更新模型的可填充字段
在模型的$fillable数组中添加email字段,确保数据库的主邮箱字段支持批量赋值:
protected $fillable = [ 'first_name', 'last_name', 'email', 'other_emails' ];
2. 修改控制器代码,同步主邮箱信息
从主预订对象中获取邮箱值,在创建每条关联记录时一并写入数据库:
$firstName = $booking->first_name; $lastName = $booking->last_name; $mainEmail = $booking->email; // 获取主用户的邮箱 foreach ($request->input('other_emails') as $email){ Booking::create([ 'first_name' => $firstName, 'last_name' => $lastName, 'email' => $mainEmail, // 写入主邮箱信息 'other_emails' => $email ]); Mail::to($email)->send(new OthersEmail($isi_email1)); }
说明
修改后,循环创建的每条预订记录都会包含主用户的姓名和邮箱信息,与期望结果一致。如果不需要保留初始的主记录(ID:1),可调整主记录的创建逻辑或直接删除该记录。
内容的提问来源于stack exchange,提问作者Nicho
相关产品推荐
相关产品推荐

