如何验证laravel-admin中唯一的多个列?

时间:2020-04-22 14:48:04

标签: laravel validation unique laravel-admin

表格列

  • id
  • idea_id
  • question_id

我想做什么

我想验证相同的idea_id和相同的question_id。

例如。

id:1 idea_id:1 question_id:1

id:2 idea_id:1 question_id:2

id:3 idea_id:2 question_id:1

id:4 idea_id:1 question_id:1←验证错误!因为idea_id = 1和question_id = 1条记录存在!

larave-admin中的控制器

/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
    $form = new Form(new IdeaQuestionAdoption());

    $form->select('idea_id', __('Idea id'))
            ->options(Idea::pluck('body', 'id'))
            ->rules('required');
    $form->select('question_id', __('Question id'))
            ->options(Question::pluck('title', 'id'))
            ->rules('required|unique:idea_question_adoptions,idea_id' . 
    $form->model()->id);

    return $form;
}

但是。它不起作用,因为$form->model()->id为空。

如何验证laravel-admin中唯一的多个列?

  • 我失败了'required|unique:idea_question_adoptions,idea_id' . $form->model()->id

  • 我无法覆盖更新方法。(此功能无法进行更新)

public function update($id)
{
    $data = IdeaQuestionAdoption::find($id);

    $validator = Validator::make($data, [
        'question_id' => 'required|unique:idea_question_adoptions,idea_id' . $data->id,
    ]);
    if ($validator->fails()) {
        return redirect()->back()->withErrors($validator)->withInput();
    }
    return $this->form()->update($data->id);
}

如何验证laravel-admin中唯一的多个列?

请帮助我。

1 个答案:

答案 0 :(得分:0)

我通过覆盖存储和更新方法进行验证。

/**
     * 新規登録時に、question_idとidea_idが両方同じデータがあるとバリデーションをする
     *
     * @return void
     */
    public function store()
    {
        $data = request()->all();
        $validator = Validator::make($data, [
            'question_id' => [
                'required',
                Rule::unique('idea_question_adoptions')->where(function ($query) use ($data) {
                    return $query->where('question_id', $data['question_id'])
                        ->where('idea_id', $data['idea_id']);
                }),
            ], [
            'question_id' => 'そのデータは既に存在しています。',
            ]
        ]);

        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }
        return $this->form()->store();
    }

      /**
     * 更新時にquestion_idとidea_idが両方同じデータがあるとバリデーションをする
     *
     * @param [type] $id
     * @return void
     */
    public function update($id)
    {
        $data = request()->all();

        $validator = Validator::make($data, [
            'question_id' => [
                'required',
                Rule::unique('idea_question_adoptions')->ignore($id)->where(function ($query) use ($data) {
                    return $query->where('question_id', $data['question_id'])
                        ->where('idea_id', $data['idea_id']);
                }),
            ], [
            'question_id' => 'そのデータは既に存在しています。'
            ]
        ]);
        if ($validator->fails()) {
            return redirect()->back()->withErrors($validator)->withInput();
        }
        return $this->form()->update($id);
    }