web-dev-qa-db-ja.com

スキーマビルダーlaravel 2つの列で一意の移行

2つの列に一意の制約を設定するにはどうすればよいですか?

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);
90
user391986

2番目のパラメーターは、一意のインデックスの名前を手動で設定することです。配列を最初のパラメーターとして使用して、複数の列にわたって一意のキーを作成します。

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

または(ちょっとした)

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

単に使用できます

$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']);
    });
14
İsmail Atkurt