【问题标题】:How to save the id passed in the route in laravel如何在laravel中保存路由中传递的id
【发布时间】:2021-03-03 20:31:16
【问题描述】:

我需要将路由中传递到数据库的 id 保存在我的 store 函数中,该函数有一个单独的函数来验证,

这是我的网络路线

   Route::resource('venues/{venue}/categories/{category}/sub-categories', 'Manage\SubCategoriesController');

这是我的store 函数

  public function store($venue, $category, SubCategory $subCategory)
    {
        $subCategory->create($this->validateRequest());
        dd('created');
    }

这是我的验证函数

 // ! Validation
private function validateRequest()
{
    return request()->validate([
    'name'=>'required',
    'discount'=>'sometimes',
    'position'=>'required',
    'special_start'=>'sometimes',
    'special_end'=>'sometimes',
    'category_id'=>'sometimes',
    'venue_id'=>'sometimes'
    ]);
}

我需要从路由 url 中获取 category_idvenue_id 并将其保存到数据库中

我尝试在 validate 函数中执行此操作,但它会引发错误

 // ! Validation
private function validateRequest($venue, $category)
{
    return request()->validate([
    'name'=>'required',
    'discount'=>'sometimes',
    'position'=>'required',
    'special_start'=>'sometimes',
    'special_end'=>'sometimes',
    'category_id'=>$venue,
    'venue_id'=>$category
    ]);
}

存储功能

     public function store($venue, $category, SubCategory $subCategory)
    {
        $subCategory->create($this->validateRequest($venue, $category));
        dd('created');
    }

有人可以建议我解决这个问题吗

【问题讨论】:

  • 你检查dd($request->all()是否所有数据都来了?
  • resource 定义名称应该是 Route::resource('venues.categories.sub-categories', ...) ... 并且验证工作的规则不是值
  • Route::resource('one.two', 'TestController'); 它会给http://127.0.0.1:8000/one/{one_id}/two/{two_id}
  • 'category_id'=>$venue, 'venue_id'=>$category 看起来你搞混了?!
  • 您实际上想通过输入验证 category_idvenue_id 的什么?

标签: laravel eloquent laravel-7 laravel-validation


【解决方案1】:

之所以不起作用是因为路由参数$venue$category不是请求数据的一部分。

您需要将它们作为请求的一部分发送,或者将它们与您的请求数据合并,如下所示:

public function store($venue, $category, SubCategory $subCategory)
{
    request()->merge([
      'venue_id' => $venue,
      'category_id' => $category,
    ]);
    
    $subCategory->create($this->validateRequest());
}

【讨论】:

  • 我尝试了上面的合并,它没有得到id的SQLSTATE[HY000]:一般错误:1364字段'venue_id'没有默认值(SQL:插入sub_categoriesname, updated_at, created_at) 值 (Alexis Michael, 2020-11-20 12:46:26, 2020-11-20 12:46:26))
  • @Jareer 是模型上的 venue_idcategory_id 字段“可填充”吗?
  • 它现在可以工作了,在我添加了venue_id和category_id字段到可填写的@cDruc
【解决方案2】:

我必须将category_idvenue_id 传递给create.blade.php 视图到隐藏输入中,

创建函数

  public function create($venue, $category)
    {
        $data = [
            'category'=>$category,
            'venue'=>$venue,
        ];

        return view('manage.subcategories.create')->with($data);
    }

创建刀片

<input type="hidden" value="{{ $venue }}" name='venue_id'>
<input type="hidden" value="{{ $category }}" name='category_id'>

现在当我 dd($request-&gt;all()); 它得到 category_idvenue_id

输出

现在我可以使用验证来保存它

 public function store(Request $request, $venue, $category, SubCategory $subCategory)
    {
        // dd($request->all);
        $subCategory->create($this->validateRequest($venue, $category));
        dd('created');
    }

【讨论】:

    猜你喜欢
    • 2021-01-04
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2016-03-09
    • 2020-01-23
    • 2021-05-27
    相关资源
    最近更新 更多