[英]Is it possible to reference a Foreign Key in a different database in Laravel?
[英]Laravel database foreign key
我想让用户具有用户,管理员,编辑器之类的等级。但是我不能从表中添加外键来对用户表中的列进行排序。
这是排名表迁移
Schema::create('ranks', function (Blueprint $table) {
$table->increments('id');
$table->string('rank', 32)->charset('utf8')->nullable($value = false);
});
这是用户表迁移
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 64)->charset('utf8')->nullable($value = false);
$table->string('email', 128)->unique()->charset('utf8')->nullable($value = false);
$table->string('password', 128)->charset('utf8')->nullable($value = false);
$table->integer('rank')->unsigned()->default(1);
$table->foreign('rank')->references('id')->on('ranks')->nullable($value = false);
$table->rememberToken();
$table->timestamps();
});
默认情况下, users
表迁移具有2014_10_12_000000
时间戳,因此在手动创建的任何迁移之前都会创建2014_10_12_000000
时间戳。 因此,更改ranks
表迁移文件名时间戳以在users
表之前创建表。 例如:
2013_10_12_000000_create_ranks_table.php
2014_10_12_000000_create_users_table.php
同样,将FK约束代码移动到单独的闭包中:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 64)->charset('utf8')->nullable($value = false);
$table->string('email', 128)->unique()->charset('utf8')->nullable($value = false);
$table->string('password', 128)->charset('utf8')->nullable($value = false);
$table->integer('rank')->unsigned()->default(1);
$table->rememberToken();
$table->timestamps();
});
Schema::table('users', function (Blueprint $table) {
$table->foreign('rank')->references('id')->on('ranks')->nullable();
});
如果您的排名是固定的,则更好的设计是在用户表中添加一个ENUM
字段。
$table->enum('rank', [User::LEVEL_ADMIN, User::LEVEL_EDITOR]);
常量在User类中定义的位置。 然后,您可以摆脱排名表。
-
例如,如果要将等级保留在单独的表中,以便管理员进行管理,则可以保留该等级,但先创建表,然后再添加外键。
另外,请利用rank_id
约定,并调用外键rank_id
这样就无需在模型的关系方法中指定它。
Schema::create('ranks', function (Blueprint $table) {
$table->increments('id');
$table->string('rank', 32)->charset('utf8');
});
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 64)->charset('utf8');
$table->string('email', 128)->unique()->charset('utf8');
$table->string('password', 128)->charset('utf8');
$table->integer('rank_id')->unsigned();
$table->rememberToken();
$table->timestamps();
});
Schema::table('users', function (Blueprint $table) {
$table->foreign('rank_id')->references('id')->on('ranks');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.