如何在Laravel 5中使用表的全局前缀

时间:2016-06-01 04:02:37

标签: laravel laravel-5 laravel-5.2 artisan artisan-migrate

Laravel的新功能。可能是一个愚蠢的问题。我有这样的设置数据库:

'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,
    ],

注意'prefix' => 'admin'。这是因为我希望与网站控制面板相关的所有表格都以 admin 为前缀,例如:admin_users,admin_log等...

但我一开始就陷入了困境。我试图通过工匠创建迁移,但它没有使用前缀创建表。

php artisan make:migration create_users_table --create=users

我希望创建一个名为admin_users的表。但事实并非如此。

我这样做了吗?

4 个答案:

答案 0 :(得分:6)

Laravel缓存配置文件,因此您可能只需要清除缓存:

php artisan config:clear

除此之外,更好的做法是使用.env文件定义前缀,如下所示:

...
DB_PREFIX=admin_
...

并将其加载到您的配置文件中,如下所示:

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

这是默认情况下的样子。

您已经从.env文件加载了主机名和端口,为什么不对其他值也这样做呢?

答案 1 :(得分:0)

将在没有前缀的情况下创建迁移。运行php artisan migrate后,您应该会看到带有前缀

的表格

答案 2 :(得分:0)

前缀本身不包括下划线(_)。要创建admin_users,您必须使用admin_前缀 生成迁移时,您将获得没有前缀的普通表名。

使用prefix = 'admin_';这个:Schema::create('users', function (Blueprint $table) {<...>});将导致admin_users表的创建,因为Laravel默认情况下会添加您的前缀。

<强> TL; DR

即使您的方案显示没有前缀的表名,Laravel也会使用前缀创建它。

答案 3 :(得分:0)

您应该使用 _ 方法将连接应用到架构构建器。

出于某种原因,如果您只是设置 Schema::connection($name) 属性 - 迁移使用此连接来运行查询,但不会在架构构建期间使用它。

以下是使用connection连接创建custom表的迁移代码示例:

foo

此代码在实际应用中经过测试,运行良好。

Laravel 版本:8.40