在 Laravel 资源集合中加载属于关系

时间:2021-06-28 08:10:37

标签: laravel

我在将我的关系加载到 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. 

0 个答案:

没有答案
相关问题