我想验证相同的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条记录存在!
/**
* 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
为空。
我失败了'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中唯一的多个列?
请帮助我。
答案 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);
}