lundi 31 décembre 2018

use eloquent relationship to retrieve data for child relationship

I am using Laravel 5.6 and MySQL. I have categories, sub-categories, category_info, and services.

A category can have 1 or more sub-categories. A category belongs to one menu category

A sub-category has only one category.

A category has 1 category info record. It doesn't matter if its a category or subcategory it will have one record in the category_info table.

My table structure is as follows

Menu_Categories

id
1,
2

Categories

id, parent_category_id, menu_category_id 
1, null, 1
2, null, 1
3, 1, null
4, 1, null

Category_Info

category_id, name 
1, Legal Services 
2, Misc 
3, US Legal Services 
4, Europe Legal Services 

Controller

$cats = MenuCategories
        ::with(['categories', 'categories.info', 'categories.sub_categories'])
        ->get();

Menu Categories Model

public function categories() {
    return $this->hasMany(Categories::class, 'menu_category_id', 'id');
}

Categories Model

public function menu_categories() {
    return $this->belongsTo(MenuCategories::class, 'menu_category_id');
}

   public function sub_categories() {
    return $this->hasOne(Categories::class, 'parent_category_id');
}

public function info() {
    return $this->hasOne(CategoryInfo::class, 'category_id');
}

SubCategory Info Model

    public function category() {
    return $this->belongsTo(CategoryInfo::class);
}

I need to return the categories and the category info as follows

{
    Categories: {
        {
            id: 1,
            parent_category_id, null,
            Sub_Categories: {
                {
                    id: 3
                    parent_category_id: 1
                    Category_Info: {
                        {
                            category_id: 3,
                            name: US Legal Services
                        }
                    }
                },
                {
                    id: 4
                    parent_category_id: 1,
                    Category_Info: {
                        {
                            category_id: 4,
                            name: Europe Legal Services
                        }
                    }
                },
            },
            Category_Info: {
                {
                    category_id: 3,
                    name: Legal Services
                }
            }
        },
        {
            id: 2,
            parent_category_id, null,
            Category_Info: {
                {
                    category_id: 3,
                    name: Misc
                }
            }
        },
    }
}

With the way I have relationships set up it is returning data incorrectly. It is not returning Category_Info for sub-categories.

{
    Categories: {
        {
            id: 1,
            parent_category_id, null,
            Sub_Categories: {
                {
                    id: 3
                    parent_category_id: 1
                },
                {
                    id: 4
                    parent_category_id: 1,
                },
            },
            Category_Info: {
                {
                    category_id: 3,
                    name: Legal Services
                }
            }
        },
        {
            id: 2,
            parent_category_id, null,
            Category_Info: {
                {
                    category_id: 3,
                    name: Misc
                }
            }
        },
    }
}

Is it possible to return Category_Info for the sub-categories as well? Thanks in advance



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire