如何在laravel中打开数据库连接时自动运行命令?

时间:2014-09-19 10:10:20

标签: php laravel laravel-4 database-connection

具体来说,我正在使用sqlite,所以每次打开连接时我都需要在数据库上运行命令PRAGMA foreign_keys=1。我如何告诉laravel这样做?在某个地方是否有设置我可以指定在每个连接开始时运行的命令?

2 个答案:

答案 0 :(得分:2)

Laravel在连接和第一次查询执行之间不会触发任何事件,但您可以在查询上挂钩侦听器,它将在第一次查询运行后立即触发:

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

但是如果你需要确保你想要它运行,也许最好的方法是在每个请求上触发它,你可以通过在app/start/global.php中执行它来实现:

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

答案 1 :(得分:1)

在Laravel 4.2中,您的app目录中有一个名为filters.php的文件,它有一个默认过滤器,可在每次启动应用程序之前触发。这意味着它将在任何控制器或路径之前运行。

如果你不再在app / filters.php中拥有它,你可以添加它,它看起来像这样:

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