Посмотрев на ваше требование, вы должны создать собственное правило проверки, которое будет возвращать true, если ни один диапазон дат не сталкивается, и false в противном случае.
Чтобы реализовать такую вещь, вы должны создать собственное правило проверки Range с помощью следующей команды artisan.
php artisan make:rule Range
Теперь вы увидите Range.php
в папке App\Rules\
.
Затем сделайте свой код следующим.
Приложение\Rules\Range.php
<?php
namespace App\Rules;
use Illuminate\Contracts\Validation\Rule;
class Range implements Rule
{
/**
* Create a new rule instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Determine if the validation rule passes.
*
* @param string $attribute
* @param mixed $value
* @return bool
*/
public function passes($attribute, $value)
{
$intersect = true;
for($i=0;$i<count($value); $i++){
for($j=$i+1;$j<count($value); $j++){
if($value[$i]['start']<=$value[$j]['end'] && $value[$i]['end']>=$value[$j]['start'])
{
$intersect = false;
}
}
}
return $intersect;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The dates intersect each other.';
}
}
Теперь вы можете использовать правило диапазона в своей проверке следующим образом:
Использование
Случай I
Если вы проверяете в контроллере,
$this->validate($request,[
. . .
'data'=>[new Range],
. . .
]);
Случай 2
Если вы сделали класс запроса, то
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
. . .
'data' => [new Range],
. . .
];
}
Здесь данные — это параметр, в котором отправляются диапазоны дат.
Я надеюсь, вы поймете. Если требуется дополнительное объяснение, не стесняйтесь спрашивать.
person
Sagar Gautam
schedule
18.12.2018