Ресурс Laravel - Родители с детьми Категории - PullRequest
0 голосов
/ 17 мая 2018

Я хочу загрузить свои дочерние категории в родительский с помощью Laravel Resource.

Мой json такой:

    "data": [
    {
        "id": 2,
        "slug": "child-categorie-0",
        "name": "Child Catégorie 0",
        "parent_id": 1
    },
    {
        "id": 3,
        "slug": "child-categorie-1",
        "name": "Child Catégorie 1",
        "parent_id": 1
    },
    {
        "id": 1,
        "slug": "parent-categorie-0",
        "name": "Parent Catégorie 0",
        "parent_id": null
    },
],

Я бы хотелбыть таким:

    "data": [
    {
        "id": 1,
        "slug": "parent-categorie-0",
        "name": "Parent Catégorie 0",
        "childrens": [
            {
                "id": 2,
                "slug": "child-categorie-0",
                "name": "Child Catégorie 0",
            },
            {
                "id": 3,
                "slug": "child-categorie-1",
                "name": "Child Catégorie 1",
            }                
        ]

    }
],

App \ Http \ Resources \ Category.php

public function toArray($request)
{
    return [
        'id' => $this->id,
        'slug' => $this->slug,
        'name' => $this->name,
        'parent_id' => $this->parent_id
    ];
}

Контроллер

$categories = Category::orderBy('name', 'asc')->get();
return new CategoryCollection($categories);

Я новичок в Laravel Resource, так что если у кого-то есть путь для решения этой проблемы, спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Я решаю свою проблему!

Я создаю связь в моей модели категории.

public function childrens()
{
    return $this->hasMany('App\Category', 'parent_id', 'id');
}

В моей категории ресурсов

public function toArray($request)
{
    return [
        'slug' => $this->slug,
        'name' => $this->name,
        'childrens' => self::collection($this->whenLoaded('childrens'))  
    ];
}

В моем контроллере

$categories = Category::with('childrens')->parents()->orderBy('name','asc')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...