我写了一个小游戏进行学习,我被卡住了,我有一个类,我有生成报告的方法,当我从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 = [
];
}
我认为您没有将返回的值传递给您的响应,这就是您的json值为null的原因。 (参考@Jigius评论)
此外,我看到你创建了GenerateReport
,以便在viewed
响应中不显示json
信息。
虽然您的实现没问题,但您还可以查看Laravel的Eloquent: API Resources(Resource 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));
}
}