Zmień domyślny klucz podstawowy w Eloquent

93

Czy mogę zmienić klucz podstawowy modelu Eloquent.

Chcę na przykład ustawić klucz podstawowy admin_idzamiast „id”?

Wiem, że mogę zmienić nazwę tabeli na model

protected $table = "admin";

Czy jest coś podobnego do klucza podstawowego?

Vuk Stanković
źródło

Odpowiedzi:

191

tak

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
phirschybar
źródło
16
W przypadku innych osób odwołujących się do tego pytania użyj jednej z pozostałych odpowiedzi. $primarykeypowinno być $primaryKey(wielka litera K) i nie będzie działać inaczej.
Jeremy Harris,
4
Co się stanie, jeśli mam więcej niż jedno pole jako klucz podstawowy?
Bagusflyer
@bagusflyer Żartujesz, prawda? Więcej niż jeden klucz podstawowy w jednej tabeli bazy danych?
Novica89
@bagusflyer Eloquent nie obsługuje kluczy złożonych, ale oto dobre obejście, dzięki czemu możesz mieć $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922
Po prostu dla Twojej wiadomości, wygląda na to, że w Laravel 5.4 nie musisz już ustawiać własnego PK, jeśli jest taki sam jak nazwa modelu, który dodaje go za Ciebie (i w przeciwnym razie się pomylisz).
Mennica
14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

ale

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

zwróć uwagę na literę K (wielka) w zmiennej $ primaryKey

user3186817
źródło
10

Jeśli chcesz użyć klucza złożonego (ciągu)

Musisz się upewnić, że ustawiłeś public $incrementing = falseinaczej laravel rzuci pole na liczbę całkowitą, dając0

class User extends Model {

    protected $primaryKey = 'my_string_key';
    public $incrementing = false;

}
Toby Mellor
źródło
Zrobiłem przesłonięcie na primaryKey jako ciąg tekstowy col - wartość w kolekcji była poprawna, ale kiedy odwołałem się do col jako $ results-> primary_key, zwróciło to tylko zero, chociaż kolekcja / tablica pokazała poprawny ciąg - zajęło trochę czasu wyśledzić to, gdy zauważyłem, że primaryKey był wyświetlany jako INT i Incrementable w obiekcie. Musiał ustawić public $ inkrementacja = false.
G-Man
7

Zmienna klucza podstawowego uwzględnia wielkość liter i musi $primaryKeydziałać.

Przykład:

protected $primaryKey = 'your_primary_key_id';

Przykład w klasie Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}
ajtrichards
źródło
1
Czy nadal muszę dodawać to do tablicy $ fillable?
Anis
1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Zgodnie z dokumentacją Laravel:


Eloquent zakłada również, że każda tabela ma kolumnę klucza podstawowego o nazwie id. Możesz zdefiniować $primaryKeywłaściwość, aby zastąpić tę konwencję.

Ponadto Eloquent zakłada, że ​​klucz podstawowy jest rosnącą liczbą całkowitą, co oznacza, że ​​domyślnie klucz podstawowy zostanie automatycznie rzutowany na int. Jeśli chcesz użyć nieinkrementującego lub nienumerycznego klucza podstawowego, musisz ustawić $incrementingwłaściwość public w swoim modelu na false.

Staruszka
źródło
-3

Aby przypisać klucz podstawowy, należy ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Jay Momaya
źródło