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);
2番目のパラメーターは、一意のインデックスの名前を手動で設定することです。配列を最初のパラメーターとして使用して、複数の列にわたって一意のキーを作成します。
$table->unique(array('mytext', 'user_id'));
または(ちょっとした)
$table->unique(['mytext', 'user_id']);
単に使用できます
$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']);
});