Как проверить, перекрывается ли новый возрастной диапазон? - PullRequest
0 голосов
/ 13 апреля 2019

Моя таблица базы данных называется Timeline, и в ней есть два столбца: min_range и max_range.Я пытаюсь вставить новый возрастной диапазон, но я не хочу, чтобы он перекрывался.

То, что я хочу вернуть, верно, если возраст совпадает, и ложно, если нет.

Любая помощь приветствуется.

Это то, что я пробовал в Laravel,Я пытался проверить, попадает ли новый min_range в диапазон.Он работает для существующего диапазона, но также не позволяет мне вставить новый, если возраст не попадает в диапазон.

//check if range overlaps
$innerRange = Timeline::where('min_range', '>', $request->min_range) 
->where('max_range', '<', $request->min_range)->doesntExist();

if($innerRange){
    return response()->json(['error' => ['Range overlaps']]);
}

1 Ответ

0 голосов
/ 13 апреля 2019

Сегмент (A, B) перекрывается с (C, D), если (A, B) содержит в себе либо C, либо D, так что вы можете сделать:

$innerRange = Timeline::where(function ($query) use ($request) {
      $query->where('min_range', '<=', $request->min_range)
            ->where('max_range', '>=', $request->min_range); // contains min range
})->orWhere(function ($query) use ($request) {
      $query->where('min_range', '<=', $request->max_range)
            ->where('max_range', '>=', $request->max_range); // contains max range
})->doesntExist();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...