TL; DR: поиск регулярного или группового выражения для ключей в массиве.
subs.0.worker_id
subs.1.worker_id
subs.2.worker_id
...
Привет,
Я проверяю массив с рабочими объектами по уникальному правилу с подстановочными знаками:
'subs.*.worker_id'=>[
Rule::unique('teaching_units')->ignore($id,'teaching_unit_id')->where(function ($query) use ($date,$tu,$request,$subids) {
return $query->where(
[
['tu_date','=',$date],
['grid_unit_id','=',$tu['grid_unit_id']],
]
)
->whereIn('worker_id',$subids)
->exists();
})
],
После этого я хочу создать отдельное сообщение для этого правила, проверив валидатор и его ошибки.Поэтому обычно я использую if (isset($failedRules['worker_id']['Unique']))
, но это неправильно работает с подстановочными знаками.
foreach ($validator->errors()->toArray() as $error => $value) {
...
$failedRules = $validator->failed();
elseif (isset($failedRules['subs.*.worker_id']['Unique'])) {
$timetablesWithDuplicateTeachingUnits = DB::table('teaching_units')
->whereNotIn('teaching_unit_id', [$tu['teaching_unit_id']])
->where(
[
['tu_date','=',$date],
['grid_unit_id','=',$tu['grid_unit_id']],
]
)
->whereIn('worker_id',$subids)
->join('timetables', 'teaching_units.timetable_id', '=', 'timetables.timetable_id')
->join('courses', 'timetables.course_id', '=', 'courses.course_id')
->join('locations', 'courses.location_id', '=', 'locations.location_id')
->get();
$str = '';
foreach ($timetablesWithDuplicateTeachingUnits as $item) {
$str .= 'Im Kurs ' . $item->course_name . ' am Standort ' . $item->city . ' ist der Lehrer ' . $item->name . ' bereits für eine Stunde eingeteilt. ';
}
$errors->push([
'arrayId' => $tu['arrayId'],
//'field' => $error,
'field' => 'subs',
'msg' => $str,
]);
}
...
Я знаю, subs.*.worker_id
не работает.Но это тот момент, когда я хочу получить.Так что я на самом деле ищу подстановочный знак / регулярное выражение в имени поля.
Заранее спасибо.
Искал preg_match
, но не знаю, будет ли это работать с Laravels failRules.