Cambia la chiave primaria predefinita in Eloquent


92

Posso cambiare la chiave primaria del modello eloquente.

Voglio impostare la chiave primaria, ad esempio, admin_idinvece di "id"?

So di poter cambiare il nome della tabella per un modello simile

protected $table = "admin";

C'è qualcosa di simile per la chiave primaria?

Risposte:


190

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
Per chiunque altro faccia riferimento a questa domanda, usa una delle altre risposte. $primarykeydovrebbe essere $primaryKey(lettera maiuscola K) e non funzionerà altrimenti.
Jeremy Harris

4
Cosa succede se ho più di un campo come chiave primaria?
Bagusflyer

@bagusflyer Stai scherzando vero? Più di una chiave primaria in una tabella di database?
Novica89

@bagusflyer Eloquent non supporta le chiavi composite, ma ecco una buona soluzione alternativa in modo da poter avere $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

Solo per tua informazione, sembra che in Laravel 5.4 non sia più necessario impostare il proprio PK se è lo stesso del nome del modello in quanto lo aggiunge per te (e altrimenti si verificherà un errore).
Zecca

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

ma

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

notare la lettera K (capitale) sulla variabile $ primaryKey


9

Se vuoi usare una chiave composta (una stringa)

Devi assicurarti di impostare public $incrementing = falsealtrimenti laravel lancerà il campo su un numero intero, dando0

class User extends Model {

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

}

Ho eseguito un override su primaryKey come stringa di testo col - il valore nella raccolta era corretto ma quando ho fatto riferimento alla colonna come $ risultati-> primary_key restituiva solo zero sebbene la raccolta / array mostrasse la stringa corretta - ci è voluto un po 'di tempo per rintracciarlo quando ho notato che la primaryKey veniva visualizzata come INT e Incrementable nell'oggetto. Ho dovuto impostare public $ incrementing = false.
G-Man

7

La variabile della chiave primaria distingue tra maiuscole e minuscole e deve $primaryKeyfunzionare.

Esempio:

protected $primaryKey = 'your_primary_key_id';

Esempio all'interno di una classe Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
Devo ancora aggiungerlo all'array $ compilabile?
Anis

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Come da documentazione Laravel:


Eloquent supporrà anche che ogni tabella abbia una colonna chiave primaria denominata id. È possibile definire una $primaryKeyproprietà per sovrascrivere questa convenzione.

Inoltre, Eloquent presume che la chiave primaria sia un valore intero incrementale, il che significa che per impostazione predefinita la chiave primaria verrà espressa automaticamente su un int. Se desideri utilizzare una chiave primaria non incrementale o non numerica, devi impostare la $incrementingproprietà public sul tuo modello su false.


-3

Per assegnare una chiave primaria dovresti ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.