我想验证同一个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的记录存在
/**
* 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.
我失败了 '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中如何验证多列唯一?
请帮助我。
我通过覆盖存储和更新方法来验证。
/**
* 新規登録時に、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);
}