$post = Posts::findOrNew($post_id);
Часто на этом месте я получаю ошибку о том что id == null
У вас должна быть явная проверка на null, либо, как советует Taylor Otwell - разные методы на сохранение нового экземпляра модели и редактирования существующего.
При добавлении поста я могу выбрать несколько категорий и эта связь запишется в таблицу post_catergories .
Скажите, правильно ли вообще я все это делаю?
Да, `sync` всё сделает как нужно.
Как я могу вывести список категорий и посты к ним в шаблоне?
Получаем посты вместе с категориями:
Category::with('posts')->get();
Доступ к списку постов категории имеем через метод
$category->posts
Как я могу вывести список всех категорий в шаблон с указанием для каждой категории количества постов ?
@foreach($categories as $category)
<p>Category: {{ $category->name }} ({{ $category->posts->count() }})</p>
@endforeach
Много вопросов, не могу понять. Достался проект с Laravel 5.3
Читайте документацию, там всё это есть