Метод возврата переменных - PullRequest
0 голосов
/ 17 февраля 2019

Я пишу небольшую игру для учебы, и я застрял, у меня есть класс, где у меня есть методы для генерации отчетов, и когда я вызываю любой метод с сайта Controller, он возвращает мне переменные класса в объекте.

Вызов метода _Get или _Create возвращает:

{"id":null,"character_id":1,"name":null,"desc":null}

Класс:

class GenerateRaport {
    public $id;
    public $character_id;
    public $name;
    public $desc;

    public function _Get() {
        $raport = PlayerRaport::where('character_id', $this->character_id)->orderBy('created_at', 'desc')->get();
        return $raport;
    }

    public function _Create() {
        $new = new PlayerRaport();
        $new->character_id = $this->character_id;
        $new->name = $this->name;
        $new->desc = $this->desc;
        $new->save();
        return $new;
    }
}

Контроллер:

class RaportController extends Controller
{
    public function index(Request $request) {
        $raport = new GenerateRaport();
        $raport->character_id = \Auth::user()->character_id;
        $raport->_Get();
        return response()->json($raport, 200);
    }

    public function create(Request $request) {
        $raport = new GenerateRaport();
        $raport->character_id = \Auth::user()->character_id;
        $raport->name = "Name";
        $raport->desc = "Description";
        $raport->_Create();
        return response()->json($raport, 201);
    }
}

@ Редактировать:

class PlayerRaport extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'id', 'name', 'desc', 'character_id', 'viewed'
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [

    ];
}

1 Ответ

0 голосов
/ 17 февраля 2019

Я думаю, что вы не передаете возвращенное значение в свой ответ, поэтому ваши значения json равны нулю.(См. Комментарий @Jigius)

Более того, я вижу, что вы создали GenerateReport, поэтому информация viewed не отображается в ответе json.

Пока ваша реализация в порядке, вы также можете взглянуть на Eloquent Laravel: Ресурсы API (Resource Collections, если вы возвращаете несколько строк).Вы можете сэкономить много усилий, внедрив eloquent-ресурсы в свое решение.

Пример поиска one

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class PlayerRaport extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'desc' => $this->desc,
            'character_id' => $this->character_id
        ];
    }
}
use App\PlayerRaport;
use App\Http\Resources\PlayerRaport as PlayerRaportResource;

class RaportController extends Controller
{
    public function show(Request $request) {
        return new PlayerRaportResource(PlayerRaport::find(1));
    }
}
...