Laravel 4: Wie erstelle ich ein nicht-primärer auto-increment-Spalte mit Migrationen?
Ich arbeite aktuell an einer Laravel 4-Projekts, bestehend aus einem master-server und viele clients. Die Kunden erstellen, die Daten und sendet diese an den master-server. Um Konflikte zu vermeiden, ich bin mit UUID v4 als Primärschlüssel.
Jedoch, sobald die Daten auf dem server erstellt will ich weisen Sie eine einzigartige auto-increment-integer, so ist es einfacher für die Benutzer zu identifizieren, die Daten. Zum Beispiel: Anstatt zu sprechen über item 5a8e896d-3ab4-48d2-9d39-faeb5227f012
ein Benutzer sprechen kann, über item #24567
Halten meine app verwaltbar ich bin mit Migrationen, meine aktuelle migration für diese Tabelle sieht wie folgt aus:
public function up()
{
Schema::table('items', function($table)
{
$table->create();
$table->string('id')->primary(); //'id' For the purpose of keeping the ORM working, this field stores the UUID.
$table->integer('number', true); //The human readable item number, the second parameter is true for auto-increment
$table->text('otherdata');
$table->timestamps();
});
}
Das problem ist, dass Laravel automatisch wird ein primärer Schlüssel bei der Definition von auto-Inkrement-und so die migration endet, bis zu scheitern, weil es gibt zwei primäre Tasten.
[Exception] SQLSTATE[42000]: Syntax error or access violation: 1068 Multiple primary key defined
(SQL: alter table `items` add primary key items_id_primary(`id`)) (Bindings: array ())
Gibt es eine Möglichkeit, um eine Tabelle mit einem Primärschlüssel und einem separaten auto-increment Feld mit Laravel 4-Migrationen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe das problem gefunden, Laravel scheint zu sein, erstellen Sie einen Primärschlüssel für jede auto_increment-Feld. Wenn ich entfernt die
primary key
Teil er fragte mich, um eine index-also ich nannte->unique()
auf die migration, aber auch dies hat nicht funktioniert. Ändern derreturn ' auto_increment primary key';
zureturn ' auto_increment unique'
; mein problem gelöst, aber es ist jetzt gehackt in den core, das ist natürlich eine schlechte Praxis.trick ist, fügen Sie es außerhalb des Schema::create wie diese
Wiederholen Sie den Migrationen, den Schlüssel erstellen mit dem Namen id in der Tabelle Tabellenname können Sie dann wie jeden anderen key.
Ich denke, es kann nicht getan werden ohne änderung der core-Dateien, da das erstellen einer auto_ increment automatisch macht es als primary key.
Besser, wenn u können, melden Sie es als bug in Larvel Rahmen dev. team.
hier
Danke 🙂
du kannst es ja machen, die in Ihrem Modell Deklaration der Elemente der Klasse
nun Ihre primäre Schlüssel nicht mehr automatisch inkrementiert Feld.