【发布时间】:2019-08-07 08:43:16
【问题描述】:
我想用 Laravel 制作 Restful API,我想编写一个通过 CSV 文件的脚本,首先 POST Animal,然后从响应中获取 Animal ID,然后 POST AnimalDate,但是它没有按我的意愿工作并且我收到以下错误:
调用未定义的方法 App\Animal::getAnimalDateAttribute()
我有像 Animal 和 AnimalDate 这样的模型,我想在 json 中显示响应,所以我将 Eloquent Resources 与 JsonResource 一起使用:
{
"id": 1,
"name": "Gilda Lynch",
"country": "MO",
"description": "Soluta maiores aut dicta repellat voluptas minima vel. Qui omnis assumenda maxime.",
"image": "http://www.abshire.com/",
"dates": [
{
"id": 6,
"date_from": "2019-11-25 04:03:44",
"date_to": "2019-09-30 05:47:28",
"animal_id": 1,
},
]
}
我认为问题出在 Animal 模型和 AnimalDate 模型之间的关系上,但我无法解决它,所以我正在寻求帮助。
这些模型之间的关系:Animal hasMany AnimalDate
class Animal extends Model
{
public function animalDates()
{
return $this->hasMany(AnimalDate::class);
}
}
和 AnimalDate 属于动物
class AnimalDate extends Model
{
public function animal()
{
return $this->belongsTo(Animal::class);
}
}
我创建了资源 - AnimalDateResource.php
class AnimalDateResource extends JsonResource
{
public function toArray($request)
{
return parent::toArray($request);
}
}
和动物资源:
class AnimalResource extends JsonResource
{
public function toArray($request)
{
// return parent::toArray($request);
return [
'id' => $this->id,
'name' => $this->name,
'country' => $this->country,
'description' => $this->description,
'image' => $this->image_url,
'dates' => AnimalDateResource::collection($this->animalDates)
];
}
}
在控制器中,我只是使用new AnimalResource($animal) 和方法索引,并且显示效果很好。
有什么解决方案可以像 Animal 然后 AnimalDate 那样发布它,还是我必须先发布它然后通过 JsonResouce 显示关系?
【问题讨论】:
-
您访问代码中某处的错误->animalDate withouth复数,但这里没有代码显示,您可以在您的项目中进行查找吗?
-
不确定是否相关,但您同时拥有 animalDate 和 animalDates(复数形式)
-
您需要创建一个可以保存数组的变量,例如newAnimalDates 创建一个 foreach 循环并将每个 AnimalDates 推送到您的 newAnimalDates 数组。然后你可以拨打
'dates' => newAnimalDates -
用截图分享完整错误并分享
Animal的完整模型类
标签: php laravel eloquent laravel-resource