Laravel在动态添加数据库名称后刷新数据库配置缓存

时间:2014-08-12 22:44:28

标签: php mysql laravel laravel-4

我正在尝试创建一个Web用户界面,其中用户指定新数据库的名称,然后创建该数据库,更新Laravel数据库配置文件并运行迁移。

不要担心我要清理这段代码,我只是首先试图让基本功能失效。

public function setupDatabase($input)
    {

        /* set the database name variable from user defined input */
        $dbname = $input['database'];

        /* create the database from input */
        DB::statement("CREATE DATABASE IF NOT EXISTS `{$dbname}`");

        /* update laravels database config file to the new database name */
        $writeConfig = new \October\Rain\Config\Rewrite;
        $writeConfig->toFile(app_path() . '/config/database.php', [
            'connections.mysql.database' => $dbname
        ]);

        /* run migrations */
        Artisan::call('migrate', array('--force' => true));

    }

数据库已成功创建,config / database.php文件已更新,并且迁移尝试运行,但我收到此错误:

{"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[3D000]: Invalid catalog name: 1046 No database selected (SQL: create table `migrations` (`migration` varchar(255) not null, `batch` int not null) default character set utf8 collate utf8_unicode_ci)","file":"\/test\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Connection.php","line":600}}

我不知道如何刷新似乎缓存的数据库连接。任何建议都会很棒,我现在已经坚持了几个小时。

1 个答案:

答案 0 :(得分:0)

使用system()代替Artisan :: call()

使其工作
system('cd path/to/project && php artisan migrate --force');