Laravel :: Migration - 如何通过laravel migration创建外键?

时间:2018-01-10 04:29:26

标签: laravel laravel-5.5

如何通过referenced keyforeign key中制作laravelmigrations。 我认为我必须在laravel的数据库目录中迁移文件,这两个主题都在我的数据库中创建了一个不同的表。 第一个迁移包括一个表,该表用于具有Id名称列的帖子。 第二个迁移创建注释表,其中包含名称为post_id的列。现在the Id column in posts table is referenced keypost_id in comments table is foreign key,如何将这两列连接在一起?

5 个答案:

答案 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');
});