使用 keyby 收集方法检索 eloquent api 资源

Retrieving eloquent api resource using keyby collection method

我有一个终点API点

users/{user}

现在在用户资源中,我想 return

     public function toArray($request)
        {
            // return parent::toArray($request);

            return [
                'id' => $this->id,
                'name' => $this->name,
//                'comments' => $this->post->comments->keyBy('post_id')
                'comments' => new CommentCollection($this->post->comments->keyBy->post_id)

            ];
        }

评论集class

public function toArray($request)
    {
        // return parent::toArray($request);

        return [
            'data' => $this->collection->transform(function($comment){
                return [
                    'id' => $comment->id,
                    'comment' => $comment->comment,
                ];
            }),
        ];
    }

但结果不会包含 post_id 作为键,我怎样才能使 return 评论集合具有键 post_id?

更新

use App\models\Post;
use App\Http\Resources\Postas PostResource;

Route::get('/posts', function () {
    return PostResource::collection(Post::all()->keyBy->slug);
});

这工作正常,但如果我将用户资源中的 post 集合用作关系,它就无法工作!这就是我在评论收集中的要求。

就像这样:

     public function toArray($request)
        {
            // return parent::toArray($request);

            return [
                'id' => $this->id,
                'name' => $this->name,
//                'comments' => $this->post->comments->keyBy('post_id')
                'comments' => new CommentCollection($this->post->comments)->keyBy('post_id')

            ];
        }

我做了什么,我创建了另一个资源组集合class

<?php
namespace App\Http\Resources\Collection;

use Illuminate\Http\Resources\Json\ResourceCollection;

class CommentGroupCollection extends ResourceCollection
{
    public $collects = 'App\Http\Resources\Collection\CommentCollection';

    public $preserveKeys = true;

    public function toArray($request)
    {
        return $this->collection;
    }

}

<?php
namespace App\Http\Resources\Collection;

use Illuminate\Http\Resources\Json\ResourceCollection;

class CommentCollection extends ResourceCollection
{
    public $collects = 'App\Http\Resources\Comment';

    public $preserveKeys = true;

    public function toArray($request)
    {
        return $this->collection;
    }

}

and then 

new CommentGroupCollection($comments->groupBy('post_id')),