Obecnie pracuję nad projektem Laravel 4 składającym się z serwera głównego i wielu klientów. Klienci tworzą dane i wysyłają je do serwera głównego. Aby uniknąć konfliktów, używam klucza UUID v4 jako klucza podstawowego.Laravel 4: Jak utworzyć dodatkową kolumnę inkrementującą auto z migracjami?
Jednak, gdy dane są tworzone na serwerze chcę przypisać unikalny autoinkrementacja całkowitą więc łatwiej jest dla użytkowników w celu identyfikacji danych. Na przykład: Zamiast mówić o item 5a8e896d-3ab4-48d2-9d39-faeb5227f012
użytkownik może mówić o item #24567
aby moje app zaakceptowania Używam migracje, moja obecna migracja do tej tabeli wygląda następująco:
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();
});
}
Problemem jest to, że laravel automagicznie tworzy klucz podstawowy podczas definiowania auto-inkrementacji, dlatego migracja kończy się niepowodzeniem, ponieważ istnieją dwa podstawowe klucze.
[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())
Czy istnieje jakiś sposób, aby mieć tabeli z kluczem podstawowym i oddzielnym autoinkrementacja polu używając laravel 4 migracje.
Nie sądzę, że to jest lepsze rozwiązanie (zmienić podstawową funkcjonalność klasy Db w języku laravel.). –
Gdybyś przeczytał mój komentarz, zrozumiałbyś, że twoje rozwiązanie nie odpowiedziało na moje pytanie. Właśnie dlatego go obniżyłem. Wiem, że moje rozwiązanie nie jest najlepszą praktyką, ale twoja nie rozwiązuje mojego problemu. – christiaanderidder
, więc potrzebujesz dwóch oddzielnych kolumn pierwszej to automatycznie zwiększany klucz podstawowy i inny klucz do uuid. czy mam rację? –