【发布时间】:2020-03-02 20:37:46
【问题描述】:
我使用 Laravel 和 Resources 来创建 REST Api。我想获取一个包含有关关系元素信息的 json,例如示例
{
"id": 30,
"calf": 23,
"chest": 27
"user_id": {
"id": 30,
"email": "test@example.com"
}}
但是当我像在文档中那样创建代码时,我收到一个错误“调用 int 上的成员函数 first()”。有人可以告诉我我做错了什么吗?我在文档中做了完全相同的事情,我也尝试使用 whenLoaded 但同样的错误。这是我的代码:
class CircuitMeasurementResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'calf' => $this->calf,
'chest' => $this->chest,
'user_id' => UserResource::collection($this->user_id)
];
}
}
我的方法在Controller中显示:
public function show(CircuitMeasurement $circuitMeasurement): CircuitMeasurementResource {
return new CircuitMeasurementResource($circuitMeasurement);
}
我的模型:
class CircuitMeasurement extends Model
{
protected $fillable = [
'user_id', 'calf', 'thigh', 'hips', 'waist', 'chest', 'neck', 'biceps'
];
public function users(){
return $this->belongsTo(User::class);
}
}
class User extends Authenticatable
{
use Notifiable, HasApiTokens;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function weightMeasurement(){
return $this->hasMany(WeightMeasurement::class);
}
public function circuitMeasurement(){
return $this->hasMany(CircuitMeasurement::class);
}
}
【问题讨论】: