Como posso definir restrições únicas em duas colunas?
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
fonte
fonte
id
, dão à estrutura uma sensação de amadorismo nas bordas. Estou reclamando? :-(Respostas:
O segundo parâmetro é definir manualmente o nome do índice exclusivo. Use uma matriz como o primeiro parâmetro para criar uma chave exclusiva em várias colunas.
ou (um pouco mais arrumado)
fonte
array()
. Porque eu tentei sem matriz e não funcionou. posso dar o nome da restrição ao executar a chave composta por meio do construtor Schema?table_column1_column2...n_unique
se alguém não tiver certeza. Descartar a restrição única seria então fazer referência a isso em #$table->dropUnique('table_column1_column2...n_unique');
Simplesmente você pode usar
Referência: http://laravel.com/docs/master/migrations#creating-indexes
Como um exemplo:
fonte
->unique()
.->unique()
é mais apropriado nesta questão específica, porque'mytext'
provavelmente faria para uma chave ruim como faria com qualquerVARCHAR
ouTEXT
coluna.->primary([])
seria ótimo para garantir exclusividade em números inteiros, como chaves estrangeiras dinâmicas.fonte