Wie kann ich eindeutige Einschränkungen für zwei Spalten festlegen?
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
quelle
quelle
id
, verleihen dem Framework ein amateurhaftes Gefühl an den Rändern. Schimpfe ich? :-(Antworten:
Der zweite Parameter besteht darin, den Namen des eindeutigen Index manuell festzulegen. Verwenden Sie ein Array als ersten Parameter, um einen eindeutigen Schlüssel über mehrere Spalten hinweg zu erstellen.
oder (etwas ordentlicher)
quelle
array()
. Weil ich es ohne Array versucht habe und es nicht funktioniert hat. Kann ich den Einschränkungsnamen angeben, während der zusammengesetzte Schlüssel über den Schema-Generator ausgeführt wird?table_column1_column2...n_unique
wenn jemand unsicher ist. Das Löschen der eindeutigen Einschränkung würde dann darauf verweisen, dass in$table->dropUnique('table_column1_column2...n_unique');
Einfach können Sie verwenden
Referenz: http://laravel.com/docs/master/migrations#creating-indexes
Als Beispiel:
quelle
->unique()
.->unique()
jedoch immer noch zu, dass dies in dieser speziellen Frage angemessener ist, da'mytext'
dies wahrscheinlich zu einem schlechten Schlüssel führen würde, wie dies bei jedemVARCHAR
oder jederTEXT
Spalte der Fall wäre .->primary([])
Dies ist ideal, um die Eindeutigkeit von Ganzzahlen wie Pivot-Fremdschlüsseln sicherzustellen.quelle