Как проверить несколько уникальных столбцов в laravel -admin? - PullRequest
0 голосов
/ 22 апреля 2020

Столбцы таблицы

  • id
  • idea_id
  • question_id

Что я хочу сделать

Я хочу проверить один и тот же idea_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 -админ?

пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 23 апреля 2020

Я проверяю, переопределяя хранилище и метод обновления.

/**
     * 新規登録時に、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);
    }
...