Laravel Eloquent - текстовое поле с ведущим числом, интерпретируемым как целое число - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующий код:

    $event = Event::where('slug', '=', $param)
        ->orWhere('eventID', '=', $param)
        ->firstOrFail();

Цель состоит в том, чтобы включить $ event для заполнения либо его идентификатором, либо короткой текстовой строкой в ​​поле slug.

I'mВозникла проблема, когда текст, начинающийся с цифры, приводит к тому, что событие $ получает значение, где eventID = числовая часть текста.

Это не желаемое поведение.

Идеи?Спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Вам необходимо проверить $param для целочисленного значения и зависит от того, что сделаете запрос.Это легко сделать с помощью метода when для версий laravel> 5.3 .Для более старой версии логика будет такой же, но не используйте метод when, поскольку у нее нет третьего параметра.

$event = Event::when(filter_var($param, FILTER_VALIDATE_INT) !== false,
       function($query) use ($param){
           return $query->where('eventID', $param);
       },
       function($query) use ($param){
           return $query->where('slug', $param);
       }
       )->firstOrFail();

Другой способ:

$event = Event::query();
$event = filter_var($param, FILTER_VALIDATE_INT) !== false ? $event->where('eventID', $param) : $event->where('slug', $param);
$event = $event->firstOrFail();
...