2014-07-24 6 views
9

Próbuję ustawić kolumnę ciąg znaków jako klucz podstawowy tabeli, a następnie odwołaj go do innej tabeli jako klucz obcy. Czy to możliwe? Per dokumentacji:Laravel - jak używać obcego klucza podstawowego, który nie jest liczbą całkowitą?

Laravel assumes every table has a numeric primary key (usually named “id”) and ensures the value of this column is unique for each new row added to the table. Laravel doesn’t really work well unless each table has a numeric primary key. So, for your average Laravel application, please ensure that you define a primary key using the increments() method. 

W moim przypadku, nie chcę, aby zdefiniować kolumnę id jak byłoby bezużyteczne. Kolumna ciągu, którą chcę zdefiniować, będzie działać jako klucz podstawowy. Jeśli to możliwe, czy mogę uzyskać przykładowy fragment dotyczący migracji?

+0

@Strawberry - czy to znaczy, że trzeba określić liczbę całkowitą 'id' ??? – StackOverflowNewbie

+0

Jeśli chcesz używać Laravel, to podejrzewam, że musisz zrobić wszystko, co Laravel Ci powie! – Strawberry

Odpowiedz

2

Więcej szczegółów, dlaczego nie można napisać łańcucha w Wymówczym można znaleźć w tym forum archive.

Ponadto, w komentarzu: Eloquent odpowiada normalization rules. Mimo to, SQL obsługuje klucze obce jako ciągi znaków lub liczby całkowite bez różnicy, należy rozważyć dodanie do aplikacji klawiszy o formacie całkowitym, aby można było korzystać z metody Eloquent, czyli za pomocą ogólnie akceptowanych kluczy całkowitych.

11

To jest stare pytanie, ale ze względu na poprawność chciałbym zaznaczyć, że w aktualnych wersjach Eloquent można rzeczywiście używać nie numerycznych kluczy podstawowych/obcych.

Jedną z rzeczy, którą należy zrobić, to ustawić właściwość $incrementing na false w modelach, które używają nieinnovatingrating id.

class Employee extends Model 
{ 
    public $incrementing = false; 

    // ... 
} 

również, migracja może być coś takiego:

Schema::create('employees', function (Blueprint $table) { 
    $table->string('id')->primary(); 
    // ... 
}); 
+0

To mi pomogło właśnie teraz. Dzięki! – ceejayoz

+0

I to usuwa problem z zwracaniem '0' dla modeli, w których' protected $ primaryKey = 'slug'; ' –

Powiązane problemy