Laravel Migrations: внешний ключ на другом подключении (разные БД) - PullRequest
0 голосов
/ 19 сентября 2019

Возможно в 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');
});

Это будет указывать на таблицу users в базе данных auth.

Вопрос

Как сделать так, чтобы он смотрел в auth соединении , а не прямо в auth базе данных ?

Причина

Я спрашиваю, потому что у каждого разработчика или среды могут быть разные имена баз данных для одного и того же соединения.Если бы вместо этого мы использовали имя соединения, было бы безопаснее.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019
use Illuminate\Database\Query\Expression;


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');
});

Это решит вашу проблему.

0 голосов
/ 19 сентября 2019

Не проверял, но для многих похожих вещей в красноречивом решении было просто добавить DB :: raw в оператор.

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

Не проверял это, думал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...