Also what i don't get. Why does laravel support cross-database feature when you can't make cross-database foreign keys.
You can. Here's how:
use Illuminate\Database\Query\Expression;
// migration class...
public function up()
{
// rest of the migration
$table->foreign('user_id')
->references('id')
->on(new Expression('database_1.users'));
}
For future reference if you ever change the name of the database this will not work. It is best to grab the name of the database by the database definition.
config/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,
],
Then in your migration file:
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'));
});
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community