我在同一張表中有兩列 A 和 B。B 列只能接受 A 列的每個值的唯一值。
| A列 | B欄 | |
|---|---|---|
| 1 | 8 | |
| 1 | 52 | |
| 1 | 8 | 不允許,因為 B 列中的值 8已設定為 A 列中的值 1 |
| 2 | 78 | |
| 2 | 2 | |
| 2 | 78 | 不允許,因為 B 列中的值 78已設定為 A 列中的值 2 |
等等 ...
我正在嘗試撰寫一個可以進行此驗證的驗證規則,但我遇到了麻煩。
uj5u.com熱心網友回復:
這很容易通過添加到唯一規則的閉包來完成。假設您正在使用表單請求驗證:
public function rules(): array
{
return [
'A' => [
Rule::unique('table')->where(function ($query) {
$query->where('B', $this->B);
}),
],
];
}
uj5u.com熱心網友回復:
如果您想在驗證器中執行此操作,請使用自定義驗證規則:
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");
}
},
]);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/421712.html
標籤:
