數組鑑於整數數組:驗證整數
[1, 2, 3, 4, ...]
如何使用驗證,以檢查是否每個這些表中的存在?可能沒有foreach
循環?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);
數組鑑於整數數組:驗證整數
[1, 2, 3, 4, ...]
如何使用驗證,以檢查是否每個這些表中的存在?可能沒有foreach
循環?
$validator = Validator::make($request->all(), [
'array' => 'required|exists:users,id'
]);
您的驗證。如果存在驗證與數組一起使用,它將自動使用where in
作爲存在查詢。
因此,根據您所寫的驗證,驗證將獲得users
記錄的計數,其中id
字段位於您的array
輸入提供的ID列表中。
因此,如果您array
是[1, 2, 3, 4]
,它會得到計數,其中users.id in (1,2,3,4)
和比較,爲元素的個數在array
數組(4)。如果查詢計數> =數組數量,則驗證通過。
這裏要注意兩點:如果你檢查的列不是唯一的,或者你的數組數據有重複的元素。
如果您檢查的列不是唯一的,那麼您的查詢計數可能> =數組數,但並非實際存在陣列中的所有ID。如果你的數組是[1, 2, 3, 4]
,但你的表有四個ID爲1的記錄,即使帶有2,3,4的記錄不存在,驗證也會通過。
對於數組重複值,如果你的陣列是[1, 1]
,但你只有一條記錄爲1的ID,驗證將失敗,因爲該查詢次數爲1,但你的數組數爲2
要解決這兩個警告,你可以做個別的數組元素驗證。你的規則看起來是這樣的:
$request = [
'ids' => [1, 2, 3, 4],
];
$rules = [
'ids' => 'required|array',
'ids.*' => 'exists:users,id', // check each item in the array
];
$validator = Validator::make($request, $rules);
dd($validator->passes(), $validator->messages()->toArray());
請記住,每個元素將被單獨驗證,因此它將運行在ids
陣列中的每個元素一個新的查詢。
你可以讓你custom rule:
public function validateArrayInt($attribute, $value, $parameters){
return array_filter(value, 'is_int')
}
然後:書面應該工作
$validator = Validator::make($request->all(), [
'array' => ['required', 'array_int', 'exists:users,id']
]);
試試這個來檢查你的響應數組是否是json。
return response()->json($yourArr)->setEncodingOptions(JSON_NUMERIC_CHECK);
有沒有辦法做一個批量檢查,即檢查所有在一個單一的查詢? – user7675955
@ user7675955我已經更新了我的答案 – patricus