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

问题描述 投票:0回答:1

表的列

  • 身份证
  • 理念_id
  • 问题编号

我想做什么

我想验证同一个idea_id和同一个question_id。

例如,我想验证同一个idea和同一个question_id。

id : 1idea_id : 1question_id : 1。

id : 2idea_id : 1question_id : 2。

id : 3idea_id : 2question_id : 1。

id : 4idea_id : 1question_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 是Null.

如何在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中如何验证多列唯一?

请帮助我。

laravel validation unique laravel-admin
1个回答
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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.