Вы неправильно поняли некоторые понятия.
Здесь ваши отношения находятся между публикацией и категориями .
В публикации Модель
public function categories(){
return $this->belongsToMany(Category::class,'post_categories','post_id','category_id');
}
В модели Категория
public function posts(){
return $this->belongsToMany(Post::class,'post_categories','category_id','post_id');
}
Теперь вы можете свободно получать сообщения из категорий и категорий из сообщений.
$post = Post::with('categories')->where('id',5)->first();
Таким образом, вы получите сообщение с его категориями.
$category= Category::with('posts')->where('id',5)->first();
Таким образом, вы получите категорию с его сообщениями.
Проверьте подробнее, как многие ко многим работа
Редактировать: -
Если с помощью публикации вы хотите создать условие в категориях, тогда.
$post = Post::with('categories')->whereHas('categories', function($q){
$q->where('id',5);
})->get();