2017-02-04 1 views
2

Ich benutze Laravels Schema Builder mit mysql, um eine eindeutige Spalte zu erstellen. Aber wenn ich die einzigartige Methode verwende, ist es der Fall unempfindlich. Ich brauche es, um empfindlich zu sein. Wie kann ich das machen?Laravel Schema Builder | Unique, Case Sensitive Column

Schema:

Schema::create('item', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('key')->unique(); 
    $table->timestamps(); 
}); 

Erster Eintrag in der Datenbank:

$i = new Item; 
$i->key = "Random_Key"; 
$i->save(); 

Zweiten Eintrag in der Datenbank (kehren Eingabefehler duplizieren):

$i = new Item; 
$i->key = "random_key"; 
$i->save(); 

Antwort

3

Sie müssen character sets and collations verwenden zur Angabe case sensitive columns in mySQL

Laravel die collate and charset column modifiers in mySQL zu diesem Zweck So

hat, können Sie so etwas wie verwenden: $table->string('key')->charset('utf8')->collate('utf8_cs')->unique()

Wie die OP erwähnt, hier ist was für ihn gearbeitet:

$cs = $table->string('key')->unique();

$cs->collation = 'utf8_bin'; 
+0

Ich habe 'utf8_bin' als Kollationierung versucht, aber wenn ich die Tabellen migriert habe, wird die Sortierung nicht geändert. Ich muss in die Datenbank gehen und die Sortierung manuell ändern. Ich habe jedoch eine Lösung gefunden. Alles was Sie tun müssen, ist so etwas ... '$ cs = $ table-> string ('key') -> unique();' dann müssen Sie folgendes tun ... '$ cs-> collation = 'utf8_bin'; ' – CriticalTheWizard

+1

Froh, dass Sie eine Lösung gefunden haben. Ich werde meine Antwort bearbeiten, um zu beschreiben, was für Sie funktioniert hat – Paras