2017-02-20 88 views
0

我知道这是错误的,但我试过谷歌这种任务,我什么也没找到。根据环境自动配置数据库连接

目标

我试图让我的Laravel的环境中if check,基地,我会适当地设置我的本地环境和我的Heroku生产环境之间的数据库连接。

connections' => [ 

    'mysql'  => [ 

     'driver'  => 'mysql', 

     if(env('APP_ENV') == 'local'){ 

      'host'  => env('DB_HOST'), 
      'database' => env('DB_DATABASE'), 
      'username' => env('DB_USERNAME'), 
      'password' => env('DB_PASSWORD'), 
      'unix_socket' => env('UNIX_SOCKET'), 

     }else{ 

      'host'  => parse_url(getenv("DATABASE_URL"))["host"], 
      'database' => substr(parse_url(getenv("DATABASE_URL"))["path"], 1), 
      'username' => parse_url(getenv("DATABASE_URL"))["user"], 
      'password' => parse_url(getenv("DATABASE_URL"))["pass"], 

     } 

     'charset'  => 'utf8', 
     'collation' => 'utf8_unicode_ci', 
     'prefix'  => '', 
     'strict'  => false, 
    ] 

], 
+0

您正在使用哪种laravel版本? –

回答

1

听起来就像是Cascading config包会为你工作的伟大。 Laravel 4有一些与该软件包非常相似的东西。

你可以有你的Heroku环境config.local文件夹和config.production文件夹。

实施例的文件夹的配置

config/ (production) 

├── database.php 

config.local/ (local) 

├── database.php 

配置/ database.php中(生产)

... 
connections' => [ 
    'mysql'  => [ 
     'driver'  => 'mysql', 
     'host'  => 'Heroku Host', 
     'database' => 'Heroku Database', 
     'username' => 'Heroku Username', 
     'password' => 'Heroku Password', 
     'unix_socket' => 'Heroku Socket', 
    ],  
], 
... 

config.local/database.php中(本地)

... 
connections' => [ 
    'mysql'  => [ 
     'driver'  => 'mysql', 
     'host'  => env('DB_HOST'), 
     'database' => env('DB_DATABASE'), 
     'username' => env('DB_USERNAME'), 
     'password' => env('DB_PASSWORD'), 
    ],  
], 
... 
+0

作为答案的一部分,您可以链接一些示例或示例建议吗? – ihue

+0

@ihue我已经添加了一些示例,包中有更多关于它是如何工作的细节:https://github.com/phanan/cascading-config – Sekonda

+1

好的细节答案,我喜欢。 – ihue

1

你可以定义另一个连接,命名为exmaple mysql-heroku,然后在你的模型中你可以做protected $connection = (env('APP_ENV') == 'local') ? 'mysql' : 'mysql-heroku';

+0

酷合法把戏!我喜欢。 – ihue