Jak mogę ustawić unikatowe ograniczenia dla dwóch kolumn?
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);
laravel-4
database-schema
user391986
źródło
źródło
id
, nadają szkieletowi amatorski charakter wokół krawędzi. Czy ja narzekam? :-(Odpowiedzi:
Drugim parametrem jest ręczne ustawienie nazwy unikalnego indeksu. Użyj tablicy jako pierwszego parametru, aby utworzyć unikalny klucz w wielu kolumnach.
lub (trochę schludniej)
źródło
array()
. Ponieważ próbowałem bez tablicy i nie zadziałało. czy mogę podać nazwę ograniczenia podczas uruchamiania klucza złożonego za pośrednictwem konstruktora schematu?table_column1_column2...n_unique
jeśli ktoś nie jest pewien. Porzucenie tego unikalnego ograniczenia byłoby wówczas odniesieniem do tego w$table->dropUnique('table_column1_column2...n_unique');
Po prostu możesz użyć
Źródła: http://laravel.com/docs/master/migrations#creating-indexes
Jako przykład:
źródło
->unique()
.->unique()
jest to bardziej odpowiednie w tej konkretnej kwestii, ponieważ'mytext'
prawdopodobnie spowodowałoby to zły klucz, jak każdy innyVARCHAR
lubTEXT
kolumna.->primary([])
byłoby świetne do zapewnienia unikalności liczb całkowitych, takich jak klucze obce przestawne.źródło