I have two columns A & B in the same table. Column B can accept only unique values for each value of Column A.
column A | column B | |
---|---|---|
1 | 8 | |
1 | 52 | |
1 | 8 | not allowed because value 8 in Column B has already been set for value 1 in column A |
2 | 78 | |
2 | 2 | |
2 | 78 | not allowed because value 78 in Column B has already been set for value 2 in column A |
etc ...
I'm trying to write a validation rule that can do this verification but I'm having trouble.
If you want to do this in a validator, use a custom validation rule:
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
$validator = Validator::make($request->all(), [
// Change column_b here to the name of your input
'column_b' => function ($attribute, $value, $fail) use ($request) {
$columnB = $value;
// Change column_a here to the name of your input
$columnA = $request->input('column_a');
$records = DB::table('YOUR_TABLE')
->select('*')
// Change column_a here to the name of column A in your database
->where('column_a', $columnA)
// Change column_b here to the name of column B in your database
->where('column_b', $columnB)
->count();
if($records > 0) {
$fail("not allowed because value $columnB in Column B has already been set for value $columnA in column A");
}
},
]);