如何在Laravel中通过AJAX删除指定$key对应的real_person数据?
解决方案
1. 给删除按钮添加必要的数据属性
先修改模板里的删除按钮,把对应real_person的ID(或关联的party_id与key)存入data属性,让JS能获取到要删除的目标标识:
<a class="cursor-pointer text-secondary"> <i class="fa-solid fa-2x fa-trash" data-real-id="{{ $real->id }}"></i> </a>
2. 修正JS逻辑,动态标记待删除项
原JS的问题在于没有提前创建delete_parties[]输入框,且val()会覆盖已有值。改为动态创建hidden输入并追加到表单中,实现多删除项的收集:
$(document).on('click', '.fa-trash', function() { // 获取要删除的real_person ID const realId = $(this).data('real-id'); // 创建hidden输入,将ID存入delete_parties数组 const deleteInput = $('<input>') .attr('type', 'hidden') .attr('name', 'delete_parties[]') .val(realId); // 把输入追加到表单内 $('form').append(deleteInput); // 移除当前DOM元素 $(this).closest('.col-lg-6').remove(); });
3. 控制器中处理删除请求
在updateAndCreate方法中,直接获取delete_parties参数并执行删除操作:
public function updateAndCreate(Request $request, $userId) { // 获取所有待删除的real_person ID $deleteIds = $request->input('delete_parties', []); // 批量删除对应记录 if (!empty($deleteIds)) { \App\Models\RealPerson::whereIn('id', $deleteIds)->delete(); } // 处理其他表单更新/创建逻辑... }
可选优化:按party关联删除
如果需要通过party_id和key定位删除项,可调整如下:
- 模板按钮:
<i class="fa-solid fa-2x fa-trash" data-party-id="{{ $party->id }}" data-key="{{ $key }}"></i>
- JS代码:
const partyId = $(this).data('party-id'); const key = $(this).data('key'); const deleteInput = $('<input>') .attr('type', 'hidden') .attr('name', 'delete_parties[]') .val(JSON.stringify(['party_id' => partyId, 'key' => key]));
- 控制器处理:
foreach ($request->input('delete_parties', []) as $itemStr) { $item = json_decode($itemStr, true); $party = \App\Models\Party::findOrFail($item['party_id']); $realPerson = $party->reals->get($item['key']); $realPerson?->delete(); }
内容的提问来源于stack exchange,提问作者Asharf Khosravi
相关产品推荐
相关产品推荐

