我试图在一次迁移时在主键中创建一个外键。
这是针对Laravel 5.7的。我尝试了不同的方法来尝试实现我的目标。这是我的最终代码。
Schema::create('teachers', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->integer('user_id')->unsigned()->primary();
$table->timestamps();
});
Schema::table('teachers', function($table) {
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});
它创建一个以"user_id"作为主键的普通表,但它不是外键。
试试这段代码
Schema::create('teachers', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
Schema::create('teachers', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->integer('user_id')->unsigned()->nullable();
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
});
<?php
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
class CreateTeachersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if (!Schema::hasTable('teachers'))
{
Schema::create('teachers', function (Blueprint $table) {
$table->increments('id');
$table->string('teacher_name');
$table->unsignedInteger('user_id');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users');
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('teachers');
}
}
现在,您要将foriegn key
设置为表中users
表的id teachers
我清楚了吗
现在将列添加到技术人员表并添加外键 constarint
METHOD ONE
添加列
$table->unsignedInteger('user_id');
添加主键
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
现在解释 user_id
是教师表中的字段名称references('id')
引用用户表上的 ID on('users')
METHOD TWO
添加列
$table->integer('user_id');
添加主键
$table->foreign('user_id')->references('id')->on('users')->unsigned()->onDelete('cascade');
现在解释 user_id
是教师表中的字段名称references('id')
引用用户表上的 ID on('users')
,unsigned()
将unsignedinteger
添加到列
If Your issue is not solved kindly comment below
希望对你有帮助
你试过这个吗?
Schema::create('teachers', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->integer('user_id')->unsigned();
$table->timestamps();
$table->primary('user_id');
$table->foreign('user_id')
->references('id')
->on('users')
->onDelete('cascade');
});
我认为primary()
不能像unique()
那样链接到列定义上。