Неопределенное свойство: Illuminate \ Database \ Query \ Builder :: $ sessionId - PullRequest
1 голос
/ 23 сентября 2019

Это мой PlayerController, модель Player & Session и ресурс.

Я хочу использовать входные данные (sessionId из SessionsTable), чтобы выбрать пользователя из комнаты с тем же идентификатором (userSession) и вернуть массив вэтот формат: [{userId: 1, userName: stacki, userVote: 8}, {...}, ...]

Я уже просил [здесь] [1] добиться этого, и теперь я застрялс этой ошибкой.Что я должен изменить, чтобы решить эту проблему?Простое добавление -> first () не решает мою проблему, мне нужно более одной записи.


namespace App\Http\Controllers;

use App\Player;

use Illuminate\Http\Request;
use App\Http\Resources\Players as PlayerResource;

class PlayerController extends Controller
{
    public function index(Request $request)
    {

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

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

        return PlayerResource::collection($currentPlayers);

    }




    public function create()
    { }


    public function update()
    { }
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Player extends Model
{
    protected $fillable = [];

    public $sortable = [
        'userId',
        'userName',
        'userVote'
    ];

    public function sessions()
    {
        return $this->hasMany('App\Session');
    }

    public function players(){
        return $this->belongsToMany('App\Session');
    }

}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Session extends Model
{
    protected $fillable = [];

    public function user(){
        return $this->belongsToMany('App\Player');

    }
    public function creator()
    {
        return $this->hasOne('App\Player', 'userId');
    }
}

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

`


  [1]: /12792361/otobrazhenie-zapisei-bd-v-massive-json-v-kontrollere-laravel-php

1 Ответ

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

Ваш класс Player может расширить Illuminate\Http\Resources\Json\JsonResource вместо ResourceCollection.

Это должно решить вашу проблему.

use Illuminate\Http\Resources\Json\JsonResource;

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

Надеюсь, это поможет.

...