我正在努力创建'团队'具有竞争表的外键的表,但是如何将外键设置为可空?
Schema::create('teams', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('place');
$table->string('competition')->nullable()->default(null);
$table->foreign('competition')->references('name')->on('competitions')->onDelete('set null');
$table->timestamps();
});
Schema::create('competitions', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->timestamps();
});
答案 0 :(得分:2)
FK可以接受可以接受,这只是意味着你的团队不属于竞争对手,所以我认为你有正确的想法。我猜你得到一个错误,因为你试图在创建return strdup(my_buffer);
表之前将strdup()
表与teams
表关联起来。
首先创建competitions
表。如果已创建competitions
表,则可能需要先将其删除,然后再次尝试运行迁移。
它也可能是competitions
列上与之相关的问题。理想情况下,您应该命名该列teams
而不是name
,并将其与competition_id
表中的competition
列相关联。让竞争对手的id
列与您一样独特,应具有预期的效果,但查询可能会更慢,因为它会在varchar上创建更大的索引。
如果您在competitions
列上执行此操作,如果您需要更新比赛名称,则可能会遇到更多问题。如果你与id有关,这绝不是一个问题,因为你通常不会改变id。我认为你的仍然可以这样工作,你只需要为你的FK添加一个name
。
答案 1 :(得分:0)
您只需要在创建+---------+----+----+-------------+-------+-----+
| ID | DC | OC | ElapsedTime | Units | UPH |
+---------+----+----+-------------+-------+-----+
| 2375935 | fb | pu | 03:44:00 | 263 | 70 |
| 11259 | fb | pu | 04:50:00 | 553 | 114 |
+---------+----+----+-------------+-------+-----+
表之前先创建competitions
表。
答案 2 :(得分:0)
试试这样:
Schema::create('competitions', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->timestamps();
});
Schema::create('teams', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('place');
$table->string('competition')->nullable()->default(null);
$table->timestamps();
});
Schema::table('teams', function (Blueprint $table) {
$table->foreign('competition')->references('name')
->on('competitions')->onDelete('set null');
});