未定义的属性:Illuminate\Database\Query\Builder::$sessionId

Posted

技术标签:

【中文标题】未定义的属性:Illuminate\\Database\\Query\\Builder::$sessionId【英文标题】:Undefined property: Illuminate\Database\Query\Builder::$sessionId未定义的属性:Illuminate\Database\Query\Builder::$sessionId 【发布时间】:2020-01-23 15:12:18 【问题描述】:

这是我的 PlayerController、Player & Session 模型和资源。

我想使用输入(来自 SessionsTable 的 sessionId)从房间中获取具有相同 ID(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]: https://***.com/questions/58062014/display-db-entries-in-json-array-in-controller-laravel-php

【问题讨论】:

Undefined property: Illuminate\Database\Eloquent\Builder的可能重复 这不是重复的,只是添加 ->first() 根本不能解决我的问题 $this-&gt;sessionId 来自哪里? Class Players 需要扩展 Illuminate\Http\Resources\Json\JsonResource 才能访问模型的属性 【参考方案1】:

您的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
        ];
    

希望对你有帮助。

【讨论】:

以上是关于未定义的属性:Illuminate\Database\Query\Builder::$sessionId的主要内容,如果未能解决你的问题,请参考以下文章

无法读取未定义类型错误的属性“推送”:无法读取未定义错误的属性“推送”

带有 Ionic 4 的 SQLite?无法读取未定义类型错误的属性“then”:无法读取未定义的属性“then”

NextJS:未捕获的类型错误:无法读取未定义的属性(读取“属性”)

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

未捕获的类型错误:无法读取未定义的属性“区域”?

js运行错误 无法获取未定义或 null 引用的属性“pagecount”