如何在laravel管理中验证多个列的唯一性



表格的列

  • id
  • idea_id
  • 问题id

我想做什么

我想验证相同的idea_id和相同的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管理中的控制器

/**
* 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;
}

但是。它不起作用,因为CCD_ 1为Null。

如何在laravel管理中验证多个列的唯一性

  • '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管理中验证多个列的唯一性?

请帮帮我。

我通过重写存储和更新方法进行验证。

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

相关内容

  • 没有找到相关文章

最新更新