Как удалить пустой дочерний элемент в родительско-дочерних отношениях в Laravel? - PullRequest
0 голосов
/ 18 мая 2019

Я работаю над рекурсивными отношениями родитель-потомок в laravel и успешно рекурсивно получаю родитель-потомок от eloquent.

У меня проблема, когда у родителя или ребенка нет ребенка, это будетпокажи children: [] в моем json.Я хочу удалить пустой дочерний элемент children: [].Таким образом, если у родителя или ребенка нет ребенка, children: [] не должно отображаться.Я включу его изображение.

Моя красноречивая модель:

 public function allChild () {
        return $this->hasMany(self::class, 'parent_id', 'id')->select('id', 'parent_id', 'category_name as label');
    }
public function children () {
        return $this->allChild()->with('children');
    }

Мой контроллер

 $categories = CatalogCategories::select('id', 'category_name as label')->where('parent_id', 0)
                ->with('children')->get();

Результат сейчас

[
    {
        "id":1,
        "label":"Mainan",
        "children":[{
            "id":4,
            "parent_id":1,
            "label":"Category shoes",
            "children":[{
                "id":18,
                "parent_id":4,
                "label":"test",
                "children":[
                    {
                        "id":25,
                        "parent_id":18,
                        "label":"sub cat tes",
                        "children":[
                            {
                                "id":25,
                                "parent_id":18,
                                "label":"sub cat tes",
                                "children":[]
                            }
                        ]
                    },
                    {
                        "id":27,
                        "parent_id":18,
                        "label":"testtttt 123",
                        "children":[]
                    }
                ]
            }]
        }]
    }
]

результат, который я хочу

[
    {
        "id":1,
        "label":"Mainan",
        "children":[{
            "id":4,
            "parent_id":1,
            "label":"Category shoes",
            "children":[{
                "id":18,
                "parent_id":4,
                "label":"test",
                "children":[
                    {
                        "id":25,
                        "parent_id":18,
                        "label":"sub cat tes",
                        "children":[
                            {
                                "id":25,
                                "parent_id":18,
                                "label":"sub cat tes"
                            }
                        ]
                    },
                    {
                        "id":27,
                        "parent_id":18,
                        "label":"testtttt 123"
                    }
                ]
            }]
        }]
    }
]

1 Ответ

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

Я нашел решение, я сохраняю вывод JSON от Laravel и использую JS для устранения пустых children:[]

Я использую JavaScript для устранения пустых дочерних элементов

deleteEmpty(data){               
     for (let index = 0; index <data.length; index++) {                    
       if (data[index].children.length != 0){
          this.deleteEmpty(data[index].children);
       } else {                        
          delete data[index]['children']
       }
     }                
   return data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...