这个想法是我有一个类别,而我的应用程序的子类别是:
当我像subcategory1
进行更新并通过jquery通过new input
添加一个新的更新方法时,我遇到了问题,然后单击update
,它不会更新{{1 }},并且没有添加新的!
我的控制器代码:
subcategory1
dd请求:
public function update(Request $request, Category $category)
{
$request->validate([
'category' => 'required|string|unique:categories,category,' . $category->id,
]);
$category->update($request->only('category'));
if($request->has('subcategory')){
foreach($request->subcategory as $sub){
$category->update([
'category'=>$sub,
'parent_id'=>$category->id,
]);
}
}
session()->flash('success', 'my message');
return redirect()->route('category.index');
}
因此,当我更新一个时,我需要一个已经存在的东西,并且如果有新的东西,也要添加它
答案 0 :(得分:0)
我认为Category $ category等于$ category = Category :: findOrFail($ id)-> first();
在您的代码中,它仅接收一个类别的实例,并且可能仅更新一个类别,
我认为您必须首先接收$ ids数组,而不是Category $ category。
还请注意,您可以在laravel上使用 updateOrCreate 方法
但是我可能错了,如果误解了问题,请纠正我
}
答案 1 :(得分:0)
您没有创建/存储任何内容,因此无法以您的方式添加新的子类别。
同样,在您的foreach
循环中,您正在更新$category
,它是父类别。
如果当前子类别的请求中没有ID,则实际上没有更新它们的方法。 “最简单”的解决方案是先删除所有子类别,然后从请求中创建新的子类别。
可能看起来像这样:
$category->update($request->only('category'));
if($request->has('subcategory')){
Category::where('parent_id', $category->id)->delete();
foreach($request->subcategory as $sub){
Category::create([
'category'=>$sub,
'parent_id'=>$category->id,
]);
}
}
我认为,更好的选择是确保前端还具有子类别的ID,例如在每个输入的data
属性中。然后,您可以使用该数据并将其与输入的值一起发送到数组中,以便可以更新现有的子类别,而不是每次都删除所有子类别并创建新的子类别。