Я думаю, что цепочка 'join' сделает цель
в модели страницы:
public function posts()
{
return $this->join('pages_categories','pages_categories.page_id','=','pages.id')
->join('categories','categories.id','=','pages_categories.category_id')
->join('categories_posts','categories_posts.category_id','categories.id')
->join('posts','categories_posts.post_id','posts.id')->select('posts.*');
}