You can definitely set database settings (and any other config setting) by environment.
For Laravel 3 (for Laravel 4 and Laravel 5 see below):
Firstly - you need to define
$environments in your
paths.php and set it to something like this:
$environments = array( 'development' => array('*.dev'), 'production' => array('*.com'), );
Laravel will automatically look for this variable, and if set, will use the associated configuration.
Normally you have a
config folder, with settings such as
Now just create a new folder for each
Laravel_Env you plan to use (such as Development). You'll end up with a folder structure like this;
/application /config /development database.php /production database.php application.php config.php database.php ... user_agents.php
You'll note I've only included
database.php in each subfolder. Laravel will always load the default config settings first, then override them with any custom configs from the environments setting.
Finally, in your development/database file, you would have something like this;
<?php return array( 'default' => 'mysql' );
p.s. I just tested this on the current 3.2.12 build of Laravel - and it definitely works.
Bonus Tip: You can also automatically set an environment for Artisan, so you do not have to include the environment manually on each command line! To do this:
You need to know your 'hostname' that you are running Artisan on. To find out - temporarily edit the
artisan.phpin your root folder, and add
var_dump(gethostname());to line 2 (i.e. above everything).
php artisanfrom the command line. You will get a string dump with your hostname. In my case its "TSE-Win7";
Remove the changes to the
Add your hostname (i.e. "TSE-Win7") to the environments.
You should end up with something like this:
$environments = array( 'development' => array('*.dev', 'TSE-Win7'), 'production' => array('*.com'), );
Artisan will now run using your development environment. If you deploy to a live server - re-run these steps to get the hostname() for the server, and you can configure a specific artisan config just for the server!
For Laravel 4:
The default environment is always
production. But in your start.php file you can define additional environments.
$env = $app->detectEnvironment(array( 'local' => array('your-machine-name'), ));
On Linux and Mac, you may determine your
hostname by type
hostname in your terminal - it will output the name of your computer. On Windows put
dd(gethostname()); at the beginning of your
routes.php file - and run the website once - it will show you the current hostname of your computer.
To get the current environment as a variable in your application - read this SO answer here. Laravel 4: how can I get the environment value?
For Laravel 5:
There is single configuration file, called
.env in your root directory.
Watch this laracast, config explained fully.