我希望用户拥有像用户,管理员,编辑器这样的排名......但是我无法从排名表中添加外键来排名用户表中的列。
这是排名表迁移
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();
});
答案 0 :(得分:2)
默认情况下,users
表迁移具有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();
});
答案 1 :(得分:0)
如果您的排名已修复,则更好的设计是将ENUM
字段添加到users表。
$table->enum('rank', [User::LEVEL_ADMIN, User::LEVEL_EDITOR]);
在User类中定义常量的位置。然后你可以摆脱排名表。
-
如果您希望将队列保持在一个单独的表中以便管理员管理它们,例如您可以保留它,但可以先创建表,然后再添加外键。
此外,利用Eloquent约定并调用外键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');
});