Как я могу найти строку номера детали с диапазоном подзначений? - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь найти в базе данных деталей номер детали в следующем формате: aa-b-cc-dd-ee-ff, где ee - это число, которое может быть +/- 2 от исходного значения.

ДляПример: aa-b-cc-dd- 30 -ff должен возвращать номера деталей, которые соответствуют:

  • aa-b-cc-dd- 28 -ff
  • aa-b-cc-dd- 29 -ff
  • aa-b-cc-dd- 30 -ff
  • aa-b-cc-dd- 31 -ff
  • aa-b-cc-dd- 32 -ff

Я знаю, что могу превратить строку в массив, используя explode('-', "aa-b-cc-dd-ee-ff"), и получить значение ee оттуда, чтобы получить 5 различных значений, но мне было интересно, есть ли более эффективный способ сделать это в запросеиспользуя диапазон для значения ee:

$products = Attribute::where('Part-Number', 'LIKE', '%' . {something here} . '%')->get();

1 Ответ

1 голос
/ 11 ноября 2019

Это должно вернуть все продукты, которые соответствуют.

$num = 30;
$range = range($num - 2, $num + 2);
$regexp = "^[[:digit:]]{2}-[[:digit:]]{1}-[[:digit:]]{2}-[[:digit:]]{2}-(" . implode('|', $range) . ")-[[:digit:]]{2}";
$products = Attribute::whereRaw("Part-Number REGEXP '$regexp'")->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...