Вернуть «id», используя оператор like в Laravel Eloquent

#laravel #eloquent

#laravel #eloquent

Вопрос:

Я пытаюсь вернуть «идентификатор» заданной строки с помощью оператора like в Laravel Eloquent. Я хочу, чтобы запрос возвращал 1 или любое другое целое число, которое он находит связанным с этим запросом, но это не работает. Вместо этого он возвращает поле ‘сокращение’.

 public function getIdByAbbreviation($string)
{
    return $this->model->where('abbreviation', 'like', '%'.$string.'%')
        ->pluck('id')->first();
}
  

Ответ №1:

Функция pluck возвращает массив, поэтому вы не можете вызвать first array. Попробуй это:

 return optional($this->model->where('abbreviation', 'like', "%$string%")->first())->id;
  

Просто чтобы вы знали, first может вернуться null , поэтому вам следует проверить значение null, прежде чем пытаться получить id .

Или, как предложил @DeesOomens, обернуть его в необязательный.

Комментарии:

1. Может быть, обернуть запрос вокруг необязательного() , чтобы он не выдавал исключение?

2. Спасибо за ваш комментарий. Я пробовал это, но он все равно вернул поле сокращения вместо I’d.

3. @johngodstime что вы пробовали? Не имеет смысла, что этот код возвращает сокращение вместо идентификатора, вы делаете что-то еще, что вы не показываете.

4. Спасибо @nakov . Но почему необязательный метод?

5. Потому что first может возвращать значение null, которое вызовет исключение, если вы попытаетесь вызвать id для нулевого объекта. Таким образом, если значение равно null, необязательный параметр вернет значение null.

Ответ №2:

Вам нужно получить ->get() все результаты запроса, прежде чем вы сможете ->pluck() задать значение:

 public function getIdByAbbreviation($string)
{
    return $this->model->where('abbreviation', 'like', '%'.$string.'%')
        ->get()
        ->pluck('id')
        ->all();
}