i have 2 model
1 – category with parent and child
class Category extends Model
{
protected $primaryKey = 'id';
public $fillable = ['slug','title','icon','parent_id'];
/**
 * Get the index name for the model.
 *
 * @return string
*/
public function childs() {
    return $this->hasMany('AppCategory','parent_id','id') ;
}
public function parent()
{
    return $this->belongsTo('AppCategory', 'parent_id','id');
}
public function posts(){
    return $this->belongsToMany('AppPost', 'category_post');
}
public function latestposts(){
    return $this->belongsToMany('AppPost', 'category_post')->latest()->limit(3);
}
}
2 – post model with belongsToMany->Category
class Post extends Model 
{
protected $primaryKey = 'id';
public $fillable = ['user_id','slug','title','excerpt','content','keyword','img','status'];
protected $table = 'posts';
public function cat_posts(){
    return $this->belongsToMany('AppCategory', 'category_post');
}
}
example data treeview:
1-category parent |- 1-child category -> with 5 post |- 2-child category -> with 3 post
Now, when viewing the main section -> (category parent), I want to display all the posts in all of the children’s category To be the result of the number of posts = 8
And by pagination How can I do that
Advertisement
Answer
first, you need to make a query to get all subcategory from your main category
in this example, I suppose that the first category is a main category
$subsCat = Category::first()->childs->pluck('id');
after that you can fetch all products with these categories id 
Post::whereIn('category_post', $subsCat)->paginate(8);
and in case if you don’t need to paginate you can make it in a single line 
using each from laravel collection like this one
$cat->childs->each(function($child){ 
   $child->posts;
})
you can read more about each and whereIn from the docs
The first example with
paginateis more efficient because it will make only two queries