How to use global prefix for tables in Laravel 5

user6407527 picture user6407527 · Jun 1, 2016 · Viewed 7.2k times · Source

New in Laravel. Probably a silly question. I had setup database like this:

'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '3306'),
        'database' => 'mydb',
        'username' => 'myusername',
        'password' => 'mypassword',
        'charset' => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix' => 'admin',
        'strict' => false,
        'engine' => null,
    ],

Notice 'prefix' => 'admin'. This is because I want all tables related to the website's control panel be prefixed with admin, e.g: admin_users, admin_log, etc...

But I'm stuck at the very beginning. I'm trying to create migrations via artisan but it's not creating the tables with the prefix.

php artisan make:migration create_users_table --create=users

I'm expecting that to create a table named admin_users. But it's not.

Am I doing this right?

Answer

aalaap picture aalaap · Jul 11, 2018

Laravel caches config files, so you may simply need to clear the cache:

php artisan config:clear

In addition to this, a better practice is to use the .env file to define your prefix, like this:

...
DB_PREFIX=admin_
...

and loading that in your config file, like this:

'prefix' => env('DB_PREFIX', 'abc')

This is how it should have been by default.

You're already loading the hostname and port from the .env file, so why not do it for the other values as well?