Laravel迁移:不同连接(不同DB)上的外键



在Laravel 5中可能

Schema::create('posts', function (Blueprint $table) {
....
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on('auth.users')->onDelete('cascade');
});

这将引用auth数据库上的users表。

问题

如何使它看起来在auth连接中,而不是直接在auth数据库中

原因

我问是因为每个开发人员或环境可能为同一连接提供不同的数据库名称。如果我们改用连接名称,它会更安全。

use IlluminateDatabaseQueryExpression;

Schema::create('posts', function (Blueprint $table) {
$database = DB::connection("auth")->getDatabaseName();
....
$table->integer('user_id')->unsigned()->nullable();
$table->foreign('user_id')->references('id')->on(new Expression($database . '.users'))->onDelete('cascade');
});

这将解决您的问题。

没有检查出来,但是对于雄辩解决方案中的许多类似事情,只需在语句中添加DB::raw。

$table->foreign('user_id')->references('id')->on(DB::raw('auth.users'))->onDelete('cascade');

没有测试它的想法。

最新更新