操纵Laravel资源API以逗号分隔的格式显示关系

时间:2019-09-11 14:51:09

标签: php laravel

我在laravel资源中有一个简单的关系,如下所示:

在我的家庭模型中:

public function gallery()
{
    return $this->hasMany(Gallery::class);
}

在我的画廊模型中:

public function home(){
    return $this->belongsTo(Home::class);
}

现在在我的控制器中:

$data = Home::with('gallery')
    ->where('is_deleted', 0)->Paginate(env('PAGINATE_NUMBER'));
return new HomeResource($data);

现在,这向我显示了如下结果:

 {
        name: example,
        id: 1,
        gallery: {
            id: 1,
            name:item1,
        },
        {
            id: 2,
            name:item2,
        },
        {
            id: 3,
            name:item3,
        }
    }

但是在我的资源中,我想将格式更改为如下所示:

{   
name:example,
id : 1,
some other fileds ,
     gallery: {item1,item2,item3,item4,. . .
}
}

我希望我的画廊仅选择名称列并用逗号分隔,但我的问题是我必须在资源中加载关系并更改,我不知道是否有可能更改加载在关系中的属性资源与否。

1 个答案:

答案 0 :(得分:2)

您可以使用爆破方法在HomeResource上执行以下操作:

class HomeResource extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'gallery' => $this-> gallery->implode('name',','),

        ];
    }
}