Вопрос: Как правильно назвать pivot-таблицу при отношении многие ко многим в laravel?

Лучший ответ:
сущности в алфавитном порядке в ед.числе в snake_case, например, blog_category_post или product_shop_category
поля в pivot: blog_category_id и post_id, shop_category_id и product_id

Худший ответ:
Правильно это делать таблицу под вашу предметную область.

Если связка "появляется" при разработке функционала шоп - то префикс - шоп. Затем идет таблица, которая имеет "больший охват" и затем таблица которая имеет "меньший охват" (либо если охват туманно звучит - то как читаешь задание - продукты лежат в категории, значит так и есть категория первая, продукт - вторая). Скорее всего в продукт отсутствует префикс "шоп" потому что вы решили, что продукт это глобалка, дескать разрабатываю магазин - значит зачем мне писать ShopProduct, если можно - Product. В то же время в магазине оказалось что есть Category, а потом вы решили сделать ShopCategory, потому что Category уже была, но вы, возможно, задумались что это кусок совершенно другого функционала.

И правильно задумались, т.к. общий функционал "ядро" не включает ваше поведение проекта, функционал ядра называется ядром потому что его можно использовать в десяти разных проектах почти не изменяя. Если уж совсем следовать стандарту то удобно называть модельки ядра префиксом Info, например InfoDictionary, InfoCurrency, InfoFile, InfoImage - но его можно и опускать, если вы понимаете, что вы специально это сделали. Категория на мой взгляд имеет больший охват ответственностей (она старше, т.к. продукты в ней лежат по задумке), чем продукт.

То есть правильное название:
shop_category_product (для таблиц - shop_category и product)
shop_blog_category_shop_product (для таблиц - blog_category и shop_product, префикс - обозначает кусок техзадания, в котором появилась возможность нахождения продукта в категории блога). В данном случае это исключает, что сами продукты могут быть по категориям, хотя чаще всего это так. Поэтому возможно правильнее было бы иметь shop_category и shop_product, связку shop_category_product, а в shop_category сделать belongsTo на blog_category, показав что есть связь между той категорией и этой.

Вообще я когда-то раньше делал модели для пивотов и даже наследовал их класс Pivot, но потом понял, что это по большей части ничего не дает, и проще соединить таблицами через связь, чем класс создавать.

Бывает когда там нужна модель, но почему бы ей не быть просто моделью, если она вам нужна, чем делать для нее специальный тип, который отличается от модели только тем, что не умеет во множественное число и игнорирует установку дат, и чаще всего не имеет id. Когда вы захотите это оптимизировать на работу "по 100 штук" и попробуете применить $model->chunk(100) сие ругнется, что в таблице нет айди и так невозможно. То есть использование собственных пивотов во имя "порядка" и "эстетики" создает проблемы.

И ради бога, выпилите из ларавельной функции getTable() {} которая в Illuminate\Eloquent\Model преобразование во множественное число. Вы обожжетесь не один раз пытаясь преобразовать "people" в "person" и тратите драгоценное процессорное время на анализ окончаний, который в результате не дает вам ничего, кроме эстетики. Привыкните делать таблицы в единственном числе. С ними проще работать.

Можно то как хочешь, но нужно так.