如何使用查询生成器获取laravel store函数中的Id字段?

pftdvrlh  于 2023-02-14  发布在  其他
关注(0)|答案(1)|浏览(109)

我尝试在laravel crud控制器中创建一个函数,我需要得到categories的id来存储一个新的子类别,在我的mysql数据库的categories表中,我有name字段和一个表示父类别的father id,我正在创建一个函数来创建新的子类别,但是我无法获取father id
我的控制器:

{
        $request->validate([
            'name' => 'required|max:100',
//User insert the name of the father category
            'category' => 'exists:categories,name'
        ]);

        $category = new Category();

//I try to extract id from table
        $father_id = Category::where('name', '=', $request->input('category'))->value('id');

        $category->name = $request->input('name');
        $category->father_id = $father_id;

        $category->save();
       // return $father_id;
         return redirect()->route('categories.index')->with('success', 'category added successfully');
    }

当我尝试返回'father_id'变量为空时

wvyml7n5

wvyml7n51#

我建议您使用Categories选项构建表单,并将category的id作为值。
这将消除用户输入随机类别名称的可能性。
与此同时,您的问题将得到解决,因为您将直接从用户输入/提交的数据中获得类别ID。
示例

<select name="category_id">
  <option value="0">No parent category</option>
  <option value="1">Category 1</option>
  <option value="2">Category 2</option>
  ....
</select>

在你的控制器里

{
        $validated = $request->validate([
            'name' => 'required|max:100',
            'category_id' => 'integer|exists:categories,id'
        ]);

        // optional here you can add extra checker if combination already exists.

        // lets create users's new Category
        $category = Category::create([
            'name' => $validated['name'],
            'father_id' => $validated['category_id'],
        ]);

        return redirect()
            ->route('categories.index')
            ->with('success', 'New category is added successfully');
    }

注意:如果category_id为0,则使用当前验证可能会出错

相关问题