Можно ли как-то объединить события на изменения заказа и позиций в сводной таблице?

Да, в фреймворке Laravel вы можете объединить события на изменения заказа и позиций в сводной таблице через использование элегантного механизма Laravel - Observer.

Observer - это класс, который может отслеживать изменения модели и выполнять определенные действия при определенных событиях. В вашем случае, вы можете использовать Observer для отслеживания изменений моделей Order и Position и объединить их в сводной таблице.

1. Создайте класс Observer, который будет отслеживать изменения моделей Order и Position. Вы можете создать этот класс с помощью команды Artisan в терминале:

php artisan make:observer OrderPositionObserver

2. В созданном классе OrderPositionObserver, определите методы-обработчики для событий изменения моделей Order и Position. Например, метод orderUpdated будет вызываться при обновлении модели Order, а метод positionUpdated - при обновлении модели Position.

use AppModelsOrder;
use AppModelsPosition;

class OrderPositionObserver
{
    public function orderUpdated(Order $order)
    {
        // Ваш код обработки изменений в заказе
    }

    public function positionUpdated(Position $position)
    {
        // Ваш код обработки изменений в позиции
    }
}

3. Регистрируйте Observer в файле AppServiceProvider. Вы можете найти этот файл в директории app/Providers. Добавьте следующий код в метод boot:

use AppModelsOrder;
use AppModelsPosition;
use AppObserversOrderPositionObserver;

public function boot()
{
    Order::observe(OrderPositionObserver::class);
    Position::observe(OrderPositionObserver::class);
}

Теперь, при каждом изменении модели Order или Position, соответствующие методы-обработчики в OrderPositionObserver будут вызываться. В этих методах вы можете выполнять любые нужные вам операции, включая обновление сводной таблицы.

Например, если вы хотите обновить сводную таблицу при изменении какого-либо поля в моделе Order, вы можете добавить следующий код в метод orderUpdated:

public function orderUpdated(Order $order)
{
    // Ваш код обработки изменений в заказе
    
    // Обновление сводной таблицы
    $this->updatePivotTable($order);
}

private function updatePivotTable(Order $order)
{
    // Ваш код обновления сводной таблицы
}

Таким образом, вы сможете объединить события на изменения заказа и позиций и выполнять определенные действия, включая обновление сводной таблицы, при каждом изменении этих моделей в Laravel.