在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');
没有测试它的想法。