Отображение записей БД в массиве json в контроллере (Laravel / PHP) - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь написать индексную функцию в моем PlayerController, поэтому мой компонент Vue может создать массив с userId, userName, userVote в этой форме: [{userId: 1, userName: Jimmy, userVote: 7},{} ...]

У меня есть таблица игроков и таблица сессий, потому что мои Player.userSession и Session.sessionId имеют одинаковые атрибуты, я использую запрос Laravel для получения этой информации, создайте переменную сдругой класс с идентификатором Session и получите всех пользователей, которые являются частью комнаты.

Все должно быть сохранено и && возвращено обратно.

Пока это мой код:

 public function index(Request $request)
    {


        $room = $request->input('sessionId');

        $currentPlayers = Player::where('userSession', $room)->get();

        $userId = $currentPlayers->userId;
        $userName = $currentPlayers->userName;
        $userVote = $currentPlayers->userVote;


        return json_encode([
        'userId' => $userId,
        'userName' => $userName,
        'userVote' => $userVote]);

    }

Но теперь говорится: «Свойство [userId] не существует в этом экземпляре коллекции».

https://pasteboard.co/IyJyUZ0.png https://pasteboard.co/IyJypj5.png

1 Ответ

0 голосов
/ 23 сентября 2019

Вы пытаетесь получить свойство модели из объекта коллекции.Ошибка генерируется, потому что коллекция не содержит свойства userId.Вам нужно перебрать данные, чтобы получить их.

Но это не то, чего вы пытаетесь достичь.Вам нужен ответ json только с этими полями.Итак, прежде всего вы должны изменить свой запрос или отобразить свою коллекцию, чтобы выбрать только эти поля ... Так как вам нужен JSON Response, самый простой способ достичь вашей цели - использовать Api resources

Итак, вы объявляете свой ресурс:

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Player extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'userId' => $this->userId,
            'userName' => $this->userName,
            'userVote' => $this->userVote,
        ];
    }
}

и возвращаете этот ресурс как коллекцию из вашего контроллера:

<?php

namespace App\Http\Controllers;

use App\Http\Resources\PlayerResource;
// [...]

public function index(Request $request)
{

    $room = $request->input('sessionId');

    $currentPlayers = Player::where('userSession', $room)->get();

    return PlayerResource::collection($currentPlayers);

}

и Laravel сделает всю магию дляВы кодируете результат в формате JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...