如何在 Laravel 5 中为表使用全局前缀
Posted
技术标签:
【中文标题】如何在 Laravel 5 中为表使用全局前缀【英文标题】:How to use global prefix for tables in Laravel 5 【发布时间】:2016-09-30 06:19:34 【问题描述】: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
的表。但事实并非如此。
我这样做对吗?
【问题讨论】:
【参考方案1】:Laravel 缓存配置文件,因此您可能只需要清除缓存:
php artisan config:clear
除此之外,更好的做法是使用.env
文件来定义您的前缀,如下所示:
...
DB_PREFIX=admin_
...
并将其加载到您的配置文件中,如下所示:
'prefix' => env('DB_PREFIX', 'abc')
默认情况下应该是这样的。
您已经从.env
文件中加载了主机名和端口,那么为什么不对其他值也这样做呢?
【讨论】:
【参考方案2】:将创建不带前缀的迁移。运行php artisan migrate
后,您应该会看到带有前缀的表
【讨论】:
【参考方案3】:前缀本身不包含下划线 (_
)。要创建 admin_users
,您必须使用 admin_
前缀。
生成迁移时,您将获得简单的表名,没有前缀。
使用 prefix = 'admin_';
this: Schema::create('users', function (Blueprint $table) <...>);
将导致创建 admin_users
表,因为 Laravel 默认会在后台添加 Your 前缀。
TL;DR
即使你的方案显示没有前缀的表名,Laravel 也会用前缀创建它。
【讨论】:
【参考方案4】:您应该使用Schema::connection($name)
方法将连接应用到架构构建器。
出于某种原因,如果您只是设置了 connection
属性 - 迁移使用此连接来运行查询,但不会在架构构建期间使用它。
以下是使用custom
连接创建foo
表的迁移代码示例:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateFoo extends Migration
protected $connection = 'custom';
/**
* Run the migrations.
*
* @return void
*/
public function up()
Schema::connection($this->connection)->create('foo', function (Blueprint $table)
$table->id();
$table->timestamps();
);
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
Schema::connection($this->connection)->dropIfExists('foo');
此代码已在真实应用中测试,运行良好。
Laravel 版本:8.40
【讨论】:
以上是关于如何在 Laravel 5 中为表使用全局前缀的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 4 中为 Route::group 设置正则表达式参数约束?
如何在 PHPMyAdmin 中为表设置默认排序(即始终“主键 - 降序”)