0

表格的列

  • ID
  • 想法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是 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 中唯一的多个列?

请帮我。

4

1 回答 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);
    }
于 2020-04-23T00:32:23.730 回答