web-dev-qa-db-fra.com

constructeur de schéma laravel migrations uniques sur deux colonnes

Comment définir des contraintes uniques sur deux colonnes?

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

Le deuxième paramètre consiste à définir manuellement le nom de l'index unique. Utilisez un tableau en tant que premier paramètre pour créer une clé unique sur plusieurs colonnes.

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

ou (un peu plus propre)

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

Vous pouvez simplement utiliser

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

Référence: http://laravel.com/docs/master/migrations#creating-indexes

Par exemple:

    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