Не удается получить значение одного столбца из базы данных

Я хочу получить одно значение из 1 записи в БД, но у меня есть ошибка ...

$gamer_name = Gamer::where('user_id', $gamer_id)->first()->name;

В итоге у меня вот такое ...

Trying to get property of non-object

Если я уберу ->name из запроса вот так

$gamer_name = Gamer::where('user_id', $gamer_id)->first();

тогда я получаю данные App\Gamer Object вместо имени. Я не могу просто получить одно значение из одной строки с помощью Eloquent.

Вы пробовали сделать это так: $ gamer_name = Gamer :: where ('user_id', $ gamer_id) -> first () [0] -> name;

Kholy 24.10.2018 02:00

Попробуйте этот Gamer::where('user_id', $gamer_id)->first(['name'])

Hkm Sadek 24.10.2018 02:02

Теоретически ваш код должен работать отлично. Что-то еще здесь не кажется правильным ... вы уверены, что это весь ваш код для получения этих значений? Выложите, пожалуйста, дамп $gamer_name = Gamer::where('user_id', $gamer_id)->first();, потому что он должен вернуть коллекцию - хотя, похоже, это не так?

Ashley Brown 24.10.2018 02:04

Существует вероятность того, что результат запроса будет пустым, что даст вам ноль при вызове first().

Wreigh 24.10.2018 02:04

@Wreigh Я думал об этом, поэтому я попросил OP опубликовать дамп, но они также сказали then I get all App\Gamer Object data instead of a name, поэтому предполагается, что ответ на запрос не пустой

Ashley Brown 24.10.2018 02:06
first() вернет модель Gamer, поэтому вы можете получить доступ к свойству name. Но first() также возвращает NULL, если запись не существует.
Ngoc Nam 24.10.2018 02:09

@ mr.boris, вы добавляли name в массив fillable в классе Gamer?

Ngoc Nam 24.10.2018 02:14

@NgocNam Я думаю, что это самоочевидно на основе предыдущих комментариев и того факта, что OP использует его, в первую очередь, для получения модели

Ashley Brown 24.10.2018 02:15

@NgocNam $fillable здесь не имеет значения, поскольку OP только извлекает значения, а не пытается их массово назначить в этом случае.

Ashley Brown 24.10.2018 02:16

@AshleyBrown Вы правы!

Ngoc Nam 24.10.2018 02:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
10
79
3

Ответы 3

Используем построитель запросов вместо коллекции, но он должен работать:

$gamer_name = DB::table("gamers")->where("user_id", $gamer_id)->value("name");

Из документации:

If you don't even need an entire row, you may extract a single value from a record using the value method. This method will return the value of the column directly:

$email = DB::table('users')->where('name', 'John')->value('email');

Для этого можно использовать pluck().

$gamer_name = Gamer::where('user_id', $gamer_id)->pluck('name');

Документация: https://laravel.com/docs/4.2/queries#selects

для этого запроса есть различные решения, и одно из самых простых может быть

$gamer_name = Gamer::where('user_id', $gamer_id)->first()->select('name');

следующий

$gamer_name = Gamer::where('user_id', $gamer_id)->first()->value('name');

Другие вопросы по теме