方法返回变量

问题描述 投票:0回答:1

我写了一个小游戏进行学习,我被卡住了,我有一个类,我有生成报告的方法,当我从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 = [

    ];
}
php laravel lumen
1个回答
0
投票

我认为您没有将返回的值传递给您的响应,这就是您的json值为null的原因。 (参考@Jigius评论)

此外,我看到你创建了GenerateReport,以便在viewed响应中不显示json信息。

虽然您的实现没问题,但您还可以查看Laravel的Eloquent: API ResourcesResource Collections,如果您返回多行)。通过为您的解决方案实施雄辩资源,您可以节省大量精力。

找一个样本

<?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));
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.