cch*_*man 11 php mysql laravel laravel-4
我正在尝试在Laravel 4.2中为该模型创建模型和迁移.我所有的Laravel应用都使用相同的MySQL数据库laravel
.但是,我们还有另一个数据库(在同一台服务器上),调用main_db
它包含一个users
表,我想用它作为数据库中我自己的laravel_users
表中几个外键的源laravel
.
根据Laravel文档,我将使用以下代码指定一个外键:
$table->foreign('user_id')->references('id')->on('users');
Run Code Online (Sandbox Code Playgroud)
但我相信这假设该'users'
表存在于同一个数据库中.
是否可以在Laravel中执行跨数据库外键?我是否必须首先创建一个使用该users
表的模型main_db
?是否可以在app/config/database.php
?中设置两个不同的数据库连接?
luk*_*ter 27
跨数据库外键实际上与Laravel没什么关系.真正的问题是数据库是否支持它.MySQL(至少使用InnoDB)确实支持多个数据库中的外键约束.您只需使用点表示法指定数据库:db.table
.
关于Laravel模式构建器,这应该工作:
$table->foreign('user_id')->references('id')->on('main_db.users');
// ^^^^^^^
Run Code Online (Sandbox Code Playgroud)
tra*_*ids 12
如果您更改数据库的名称,以供将来参考,这将无效.最好通过数据库定义获取数据库的名称.
配置/ database.php中
'auth_database' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
],
Run Code Online (Sandbox Code Playgroud)
然后在您的迁移文件中:
Schema::create('role_user', function (Blueprint $table) {
$db = DB::connection('auth_database')->getDatabaseName();
$table->integer('role_id')->unsigned();
$table->foreign('role_id')->references('id')->on('roles');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on(new Expression($db . '.users'));
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4589 次 |
最近记录: |