如何更新和创建查询?

时间:2020-03-06 14:11:04

标签: php laravel

这个想法是我有一个类别,而我的应用程序的子类别是:

enter image description here

当我像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');
}

因此,当我更新一个时,我需要一个已经存在的东西,并且如果有新的东西,也要添加它

2 个答案:

答案 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属性中。然后,您可以使用该数据并将其与输入的值一起发送到数组中,以便可以更新现有的子类别,而不是每次都删除所有子类别并创建新的子类别。