0
是否有任何方法來驗證由兩列(start_date,end_date)設置的唯一週期時間?請通過使用Laravel 5.3驗證器讓我知道這是否可能。Laravel 5.3驗證:由兩列設置的唯一週期時間(start_date,end_date)
感謝 ARVI
是否有任何方法來驗證由兩列(start_date,end_date)設置的唯一週期時間?請通過使用Laravel 5.3驗證器讓我知道這是否可能。Laravel 5.3驗證:由兩列設置的唯一週期時間(start_date,end_date)
感謝 ARVI
所以,據我所知是沒有辦法實現的Laravel這種複雜的自定義規則。據我所知,你真的想要做一些事情是這樣的:
//////////////////////////////////////////////////
// This is not working code. just an idea !!!
//
$data['period'] = $data['start_date'] . "-" . $data['end_date'];
$validator = Validator::make($data, [
'period' => Rule::unique('projects', DB::raw('concat(start_date, "-", end_date)')),
], [
'period' => 'Period is duplicated.',
]);
但是(他們爲什麼不接受這種做法其實我想知道)Larvel不接受這樣的規則
所以,你必須2個選項。
解決方案1.在數據庫中創建一個視圖,該視圖將具有由concat(start_date,「 - 」,end_date)生成的附加列「period」。 然後讓代碼如下。
$data['period'] = $data['start_date'] . "-" . $data['end_date'];
$validator = Validator::make($data, [
'period' => Rule::unique('projects', DB::raw('concat(start_date, "-", end_date)')),
], [
'period' => 'Period is duplicated.',
]);
if ($validator->fails()) {
// do some thing
} else {
unset($data['period']); // When adding or update, 'period' will cause error because period is only in view, not in table itself
// do insert or update
}
解決方案2.只是通過正常的驗證除了獨特的檢查,所有的驗證完成後,你就在表中手動搜索檢查自己。 如下:
if (Project::where(DB::raw("concat(start_date, '-', end_date)"), "=", $data['start_date'] . "-" . $data['end_date'])->count() > 0) {
// now this is not unique, so do something
}
誰設置了這些列?這些列在哪裏設置? – anwerj
它們來自數據庫表。 –
所以你想要區別是獨一無二的?你可以粘貼一些你正在使用的代碼或測試用例 – anwerj