如何通过referenced key
在foreign key
中制作laravel
和migrations
。
我认为我必须在laravel的数据库目录中迁移文件,这两个主题都在我的数据库中创建了一个不同的表。
第一个迁移包括一个表,该表用于具有Id名称列的帖子。
第二个迁移创建注释表,其中包含名称为post_id的列。现在the Id column in posts table is referenced key
和post_id in comments table is foreign key
,如何将这两列连接在一起?
答案 0 :(得分:2)
最好为关键外来类型
设置unsignedInteger
$table->unsignedInteger('category_id')->nullable();
$table->foreign('category_id')
->references('id')
->on('categories')
->onUpdate('cascade')
->onDelete('some action');;
答案 1 :(得分:2)
以您有一个 users 表和一个 user_address 表为例。一个用户可以有多个地址,一个地址属于一个用户。
默认用户表
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
以 user_id 为外键的 user_addresses 表
Schema::create('user_addresses', function (Blueprint $table) {
$table->bigIncrements('id'); // by default the primary key is set to unsigned big integer
$table->unsignedBigInteger('user_id'); //associate the address with a user
$table->text('address');
$table->string('city');
$table->string('country');
$table->timestamps();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
});
定义迁移后,下一步是定义它们各自模型类中的关系
在用户模型中,添加
public function address(){
return $this->hasMany(UserAddress::class );
}
并在 UserAddress 模型中添加
public function user(){
return $this->belongsTo(User::class, 'user_id');
}
答案 2 :(得分:1)
你这样使用。
$table->integer('userId')->unsigned();
$table->foreign('userId')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');
答案 3 :(得分:1)
例如,如果您尝试为引用“users”表上的“id”列的表创建外键约束。为了更好的开发者体验,你可以这样写:
$table->foreignId('user_id')
->constrained('users')
->onUpdate('cascade')
->onDelete('cascade');
答案 4 :(得分:0)
Schema::table('posts', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');
});