두 열에서 고유 한 스키마 빌더 laravel 마이그레이션


125

두 열에 고유 한 제약 조건을 어떻게 설정할 수 있습니까?

class MyModel extends Migration {
  public function up()
  {
    Schema::create('storage_trackers', function(Blueprint $table) {
      $table->increments('id');
      $table->string('mytext');
      $table->unsignedInteger('user_id');
      $table->engine = 'InnoDB';
      $table->unique('mytext', 'user_id');
    });
  }
}

MyMode::create(array('mytext' => 'test', 'user_id' => 1);
// this fails??
MyMode::create(array('mytext' => 'test', 'user_id' => 2);


1
이 수준의 세부 사항은 Laravel 문서 에서 슬프게도 누락되었습니다 . 지나 가면서 언급하기가 너무 쉬울 것입니다. 이와 같은 세부 사항과 예를 들어 프레임 워크가 항상 모든 테이블이 자동 증가 할 것이라고 가정하는 것처럼 보이는 사실은 프레임 워크 id에 가장자리 주변에서 아마추어 같은 느낌을줍니다. 내가 외치고 있습니까? :-(
cartbeforehorse

답변:


277

두 번째 매개 변수는 고유 색인의 이름을 수동으로 설정하는 것입니다. 배열을 첫 번째 매개 변수로 사용하여 여러 열에 걸쳐 고유 한 키를 만듭니다.

$table->unique(array('mytext', 'user_id'));

또는 (조금 깔끔하게)

$table->unique(['mytext', 'user_id']);

1
+1 감사합니다 ... 문서에서 어떻게 놓쳤는 지 잘 모르겠습니다. 나는 장님이어야한다 : P
OACDesigns

또한 두 번째 매개 변수가 수동으로 인덱스 이름을 지정하는 것이고 자동으로 생성 된 인덱스 이름이 너무 길다는 사실을 놓쳤습니다. 고마워요! +1
Ciprian Mocanu

1
에 대한 +1 array(). 배열없이 시도했지만 작동하지 않았기 때문입니다. 스키마 빌더를 통해 복합 키를 실행하는 동안 제약 조건 이름을 지정할 수 있습니까?
Pankaj

네, 두 번째 매개 변수입니다
Collin James

7
table_column1_column2...n_unique확실하지 않은 경우 생성 된 색인 이름은 형식 입니다. 고유 한 제약 조건을 삭제하면 다음을 참조합니다.$table->dropUnique('table_column1_column2...n_unique');
Jonathan

19

간단히 사용할 수 있습니다.

$table->primary(['first', 'second']);

참조 : http://laravel.com/docs/master/migrations#creating-indexes

예로서:

    Schema::create('posts_tags', function (Blueprint $table) {

        $table->integer('post_id')->unsigned();
        $table->integer('tag_id')->unsigned();

        $table->foreign('post_id')->references('id')->on('posts');
        $table->foreign('tag_id')->references('id')->on('tags');

        $table->timestamps();
        $table->softDeletes();

        $table->primary(['post_id', 'tag_id']);
    });

4
이것은 고유성을 보장하지 않으며 단지 복합 색인을 추가합니다. 일반적으로 동일한 게시물에 동일한 태그를 두 번 사용하는 것을 원하지 않으므로이 사용 사례에서는를 사용하는 것이 좋습니다 ->unique().
okdewit

3
Fx32 @이 않는 것이 복합 생성하기 때문에 보장 고유성을 주키 (색인). 그러나 나는 어떤 또는 열 처럼 잘못된 키를 만들 수 ->unique()있기 때문에이 특정 질문에서 더 적절 하다는 데 여전히 동의합니다 . 피벗 외래 키와 같은 정수의 고유성을 보장하는 데 유용합니다. 'mytext'VARCHARTEXT->primary([])
Jeff Puckett

2
또한 통지 복합 기본 키는 일반적으로 Laravel 개발자가 눈살을 찌푸리게하고 있으며, 그들은 웅변에 의해 지원되지 않습니다 - 볼 github.com/laravel/framework/issues/5355
andrechalom

0
DB::statement("ALTER TABLE `project_majr_actvities`
               ADD UNIQUE `unique_index`(`activity_sr_no`, `project_id`)");

구두 설명이 귀하의 답변에 도움이 될 것입니다
con
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.