【发布时间】: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->sessionId来自哪里? -
Class
Players需要扩展Illuminate\Http\Resources\Json\JsonResource才能访问模型的属性
标签: php database laravel eloquent orm