未定义的属性: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->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:未捕获的类型错误:无法读取未定义的属性(读取“属性”)