ایجاد کلید ترکیبی یکتا در مایگریشن لاراول (Unique Composite Key)

اگر قصد داشته باشیم از طریق Migrationها در لاراول جدول یا جدول‌هایی ایجاد کنیم که شامل فیلدهایی باشند که قرار باشد به صورت ترکیبی عمل کرده و در عین حال unique نیز باشند (Composite key Unique on two Columns with Values)، می‌توان از راهکار زیر استفاده کرد.

فرض من بر این است که من یک جدول به نام post_tag دارم که شامل فیلدهای زیر است:

id
post_id
tag_id
created_at
updated_at

قرار است هیچ رکوردی که ترکیبی از post_id و tag_id است، نتواند بیش از یکبار در این جدول به ثبت برسد و به اصطلاح unique باشد. برای این کار در migration خود ابتدا تمام فیلدها و نوع آن‌ها را تعیین می‌کنم و سپس مشخص می‌کنم که فیلدهای post_id و tag_id به صورت ترکیبی (Composite) در نظر گرفته شوند و ترکیبشان نیز غیرقابل تکرار (unique) باشد.

public function up()
{
    Schema::create('category_post', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('category_id');
        $table->unsignedBigInteger('post_id');
        $table->unique(['category_id','post_id']);
        $table->timestamps();
    });
}

درباره نویسنده: احسان

مطالب زیر را حتما بخوانید