Я хочу получить одно значение из 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::where('user_id', $gamer_id)->first(['name'])
Теоретически ваш код должен работать отлично. Что-то еще здесь не кажется правильным ... вы уверены, что это весь ваш код для получения этих значений? Выложите, пожалуйста, дамп $gamer_name = Gamer::where('user_id', $gamer_id)->first();, потому что он должен вернуть коллекцию - хотя, похоже, это не так?
Существует вероятность того, что результат запроса будет пустым, что даст вам ноль при вызове first().
@Wreigh Я думал об этом, поэтому я попросил OP опубликовать дамп, но они также сказали then I get all App\Gamer Object data instead of a name, поэтому предполагается, что ответ на запрос не пустой
first() вернет модель Gamer, поэтому вы можете получить доступ к свойству name. Но first() также возвращает NULL, если запись не существует.
@ mr.boris, вы добавляли name в массив fillable в классе Gamer?
@NgocNam Я думаю, что это самоочевидно на основе предыдущих комментариев и того факта, что OP использует его, в первую очередь, для получения модели
@NgocNam $fillable здесь не имеет значения, поскольку OP только извлекает значения, а не пытается их массово назначить в этом случае.
@AshleyBrown Вы правы!






Используем построитель запросов вместо коллекции, но он должен работать:
$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');
Вы пробовали сделать это так: $ gamer_name = Gamer :: where ('user_id', $ gamer_id) -> first () [0] -> name;