【问题标题】: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://stackoverflow.com/questions/58062014/display-db-entries-in-json-array-in-controller-laravel-php

【问题讨论】:

  • 这不是重复的,只是添加 ->first() 根本不能解决我的问题
  • $this-&gt;sessionId 来自哪里?
  • Class Players 需要扩展 Illuminate\Http\Resources\Json\JsonResource 才能访问模型的属性

标签: php database laravel eloquent orm


【解决方案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
        ];
    }
}

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 2016-09-05
    • 1970-01-01
    • 2014-04-23
    • 2014-04-25
    • 2016-11-27
    • 2020-01-04
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多