Как автоматически запустить команду при открытии соединения БД в laravel?

В частности, я использую sqlite, поэтому мне нужно запустить команду PRAGMA foreign_keys=1 в базе данных каждый раз, когда соединение открыто. Как я скажу Laravel сделать это? Есть ли где-нибудь настройка, в которой я могу указать команды, которые будут запускаться в начале каждого соединения?

0

Решение

Laravel не генерирует никаких событий между соединением и первым выполнением запроса, но вы можете подключить слушателей к запросам, он будет срабатывать сразу после запуска первого запроса:

DB::listen(function()
{
// Run your command here
});

Но если вам нужно убедиться, что вы хотите, чтобы он запускался, возможно, лучшим способом будет запускать его при каждом запросе, вы можете сделать это, выполнив его в своем app/start/global.php:

DB::statement(DB::raw('PRAGMA foreign_keys=1'));
2

Другие решения

В Laravel 4.2 у вас есть файл с именем filters.php в каталоге вашего приложения, он имеет фильтр по умолчанию, который срабатывает перед каждым запуском приложения. Это означает, что он будет запущен раньше любых контроллеров или маршрутов.

Если вы больше не можете его добавить в app / filters.php, вы можете добавить его:

App::before(function($request)
{
//
});
1