在控制器中的 json 数组中显示数据库条目(Laravel / PHP)

我正在尝试在我的 PlayerController 中编写一个索引函数,因此我的 Vue 组件能够以这种形式创建一个包含 userId、userName、userVote 的数组:[{userId:1, userName:Jimmy,userVote:7},{}。 ..]


我有一个 Players 表和 Session 表,因为我的 Player.userSession 和 Session.sessionId 具有相同的属性,我正在使用 Laravel 的请求来获取此信息,使用具有 Session 的 ID 的其他类创建一个变量并获取所有参与其中的用户的房间。


一切都应该保存&&返回。


到目前为止,这是我的代码:


 public function index(Request $request)

    {



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


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


        $userId = $currentPlayers->userId;

        $userName = $currentPlayers->userName;

        $userVote = $currentPlayers->userVote;



        return json_encode([

        'userId' => $userId,

        'userName' => $userName,

        'userVote' => $userVote]);


    }

但现在它说:“此集合实例上不存在属性 [userId]。”


https://pasteboard.co/IyJyUZ0.png https://pasteboard.co/IyJypj5.png


智慧大石
浏览 146回答 1
1回答

MMTTMM

您正在尝试从集合对象中检索模型属性。抛出错误是因为集合不包含userId属性。您必须迭代数据才能获得它。但这不是你想要达到的目标。您想要一个仅包含这些字段的 json 响应。因此,首先您必须更改查询或映射您的集合以仅选择这些字段...由于您需要 JSON 响应,因此实现目标的最简单方法是使用Api 资源所以你声明你的资源:namespace App\Http\Resources;use Illuminate\Http\Resources\Json\JsonResource;class Player extends JsonResource{&nbsp; &nbsp; /**&nbsp; &nbsp; &nbsp;* Transform the resource into an array.&nbsp; &nbsp; &nbsp;*&nbsp; &nbsp; &nbsp;* @param&nbsp; \Illuminate\Http\Request&nbsp; $request&nbsp; &nbsp; &nbsp;* @return array&nbsp; &nbsp; &nbsp;*/&nbsp; &nbsp; public function toArray($request)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return [&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'userId' => $this->userId,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'userName' => $this->userName,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'userVote' => $this->userVote,&nbsp; &nbsp; &nbsp; &nbsp; ];&nbsp; &nbsp; }}并将此资源作为集合从您的控制器返回:<?phpnamespace App\Http\Controllers;use App\Http\Resources\PlayerResource;// [...]public function index(Request $request){&nbsp; &nbsp; $room = $request->input('sessionId');&nbsp; &nbsp; $currentPlayers = Player::where('userSession', $room)->get();&nbsp; &nbsp; return PlayerResource::collection($currentPlayers);}Laravel 会为您以 json 格式编码结果做所有的事情。
打开App,查看更多内容
随时随地看视频慕课网APP