неправильный id модели после firstOrCreate

у меня есть кусок кода который у модели вызывает метод firstOrCreate, срабатывает create, мне возвращается модель с неверным полем id.

разобрался, проблема оказалась в методе boot класса AppServiceProvider, я там добавил слушатель DB::listen для сохранения лога sql-запросов в таблицу logs, судя по всему слушатель срабатывает моментально после выполнения sql-запроса.

в firstOrCreate мне возвращается моя модель, но с последним id из таблицы logs т.к. внутри laravel он берется из lastInsertId().

вроде бы ошибка логическая, но не понятно как теперь её обойти, без прямой выборки из базы после создания объекта у меня нет его идентификатора. предположим что я хочу сохранять sql-запросы именно в таблицу для удобства выборки и никак иначе, как в этом случае поступить?

Laravel 8.4

Дополнение для конкурса:

В данный момент реализовал следующим образом:

public function boot()
{
    $_SERVER['CURRENT_REQUEST'] = md5(json_encode($_SERVER));
    DB::listen(
        function ($query) {
            $_SERVER['QUERY_SAVED'][] = [...];
        }
    );
    register_shutdown_function(function(){
        if(!empty($_SERVER['QUERY_SAVED'])){
            foreach ($_SERVER['QUERY_SAVED'] as $q){
                Logs::create(...);
            }
        }
    });
}

Пришлось задействовать глобальную переменную т.к. ничего лучше не придумал. слышал мнения что использование глобальных переменных плохая практика т.к. за ними нет контроля. Приемлемо ли это в данном случае если принять что я сам этот ключ нигде не изменяю?


Ответы (1 шт):