我在将我的关系加载到 ResourceCollection 以供 API 使用时遇到一些问题,我想加载每个属于一个类别的博客。
使用belongsTo关系的博客模型
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class BlogPost extends Model {
use HasFactory, SoftDeletes;
protected $fillable = [
'title',
'content',
'seo_title',
'seo_content',
];
public function categories(): BelongsTo {
return $this->belongsTo(BlogCategory::class);
}
}
类别模型对博客有hasMany
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class BlogCategory extends Model {
use HasFactory;
protected $fillable = [
'slug'
];
public function blogs(): HasMany {
return $this->hasMany(BlogPost::class);
}
}
在 blog_post 迁移里面,我给 blog_categories 添加了一个外键
$table->foreignId('category_id')->constrained('blog_categories');
然后,在我的 BlogPost ResourceCollection 中,我尝试加载关系,
#[ArrayShape(['data' => "\Illuminate\Support\Collection", 'category' => AnonymousResourceCollection::class])] public function toArray($request): array {
return [
'data' => $this->collection,
'category' => BlogCategoryCollection::make($this->whenLoaded($this->categories))
];
}
我在控制器的索引函数中调用集合
public function index(): BlogPostCollection
{
return new BlogPostCollection(BlogPost::all());
}
当我点击 api/blogs
端点时出现错误:
Property [categories] does not exist on this collection instance.