Nie jest to możliwe - istnieją tylko kilka przypadków, gdzie chcesz połączyć się unikalnym kolumny w tabeli, która nie jest również pk. To powiedziawszy, inne frameworki opracowały metody zmiany klucza głównego i nikt nie formalnie zażądał go od Laravel. Możesz write up a proposal on GitHub i może to być w przyszłej wersji.
Patrząc na konkretnym przykładzie na chwilę - może to mieć nieoczekiwane wyniki, gdy przyjdziesz do korzystania z relacji w sytuacjach chętnie ładowania, i to stanowi jedynie po jednej stronie relacji. Po dodaniu belongsTo na Innym będziesz miał odwrotny problem.
Może być możliwe ustawienie związku przez isbn; jednak przyjąłby on formę Book hasOne ISBN, ISBN należy do Book, ISBN ma Many Other, Other belongsTo ISBN; a dostęp do właściwości będzie wyglądał tak: $book->isbn->others
lub $other->isbn->book
.
Moja ostatnia sugestia to rozszerzenie książki i ustawienie klucza podstawowego nowej klasy jako isbn
i oparcie wszystkich relacji na tym modelu. To nie jest idealne, ale byłoby mniej bolesne niż inne rozwiązania.
Odpowiedź jest krótka - nie można. Jednak może istnieć rozwiązanie. Czy mógłbyś wyjaśnić swój schemat? Dlaczego nie możesz mieć 'book_id' jako swojego fk? –
To była istniejąca baza danych i była całkiem zła (nie był to jedyny problem). –