Подтвердить что ты не робот

Маршрутизаторы laravel построены на двух столбцах

Как установить уникальные ограничения для двух столбцов?

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);
4b9b3361

Ответ 1

Второй параметр - это вручную установить имя уникального индекса. Используйте массив в качестве первого параметра для создания уникального ключа из нескольких столбцов.

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

или (немного аккуратно)

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

Ответ 2

Просто вы можете использовать

$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']);
    });