Ubah kunci utama default di Eloquent


93

Dapatkah saya mengubah kunci utama model Eloquent.

Saya ingin menyetel kunci utama misalnya, admin_idbukan 'id'?

Saya tahu saya bisa mengubah nama tabel untuk model seperti

protected $table = "admin";

Apakah ada yang serupa untuk kunci utama?

Jawaban:


191

Iya

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
Untuk orang lain yang merujuk pertanyaan ini, gunakan salah satu jawaban lainnya. $primarykeyharus $primaryKey(huruf besar K) dan tidak akan berfungsi sebaliknya.
Jeremy Harris

4
Bagaimana jika saya memiliki lebih dari satu bidang sebagai kunci utama?
Bagusflyer

@ bagusflyer Anda bercanda kan? Lebih dari satu kunci utama dalam satu tabel database?
Novica89

@bagusflyer Eloquent tidak mendukung kunci komposit, tetapi berikut adalah solusi yang bagus sehingga Anda dapat memiliki $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

FYI saja, sepertinya di Laravel 5.4 Anda tidak perlu lagi mengatur PK Anda sendiri jika itu sama dengan nama model saat menambahkannya untuk Anda (dan akan salah jika tidak).
Mint

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

tapi

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

perhatikan huruf K (kapital) pada variabel $ primaryKey


10

Jika Anda ingin menggunakan kunci komposit (string)

Anda perlu memastikan bahwa Anda mengatur public $incrementing = falsejika tidak, laravel akan mentransmisikan bidang tersebut ke Integer, memberi0

class User extends Model {

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

}

Saya melakukan override pada primaryKey sebagai kolom string teks - nilai dalam koleksi benar tetapi ketika saya mereferensikan col sebagai $ results-> primary_key itu hanya akan mengembalikan nol meskipun collection / array menunjukkan string yang benar - butuh beberapa saat untuk melacaknya ketika saya menyadari bahwa primaryKey ditampilkan sebagai INT dan Incrementable di Object. Harus menyetel publik $ incrementing = false.
G-Man

7

Variabel kunci utama peka huruf besar / kecil dan harus $primaryKeyberfungsi.

Contoh:

protected $primaryKey = 'your_primary_key_id';

Contoh dalam kelas Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
Apakah saya masih harus menambahkannya ke array $ fillable?
Anis

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Sesuai dokumentasi Laravel:


Fasih juga akan menganggap bahwa setiap tabel memiliki kolom kunci utama bernama id. Anda dapat menentukan $primaryKeyproperti untuk mengganti konvensi ini.

Selain itu, Eloquent mengasumsikan bahwa kunci primer adalah nilai integer yang bertambah, yang berarti bahwa secara default kunci primer akan dilemparkan ke int secara otomatis. Jika Anda ingin menggunakan kunci utama non-incrementing atau non-numerik, Anda harus menyetel $incrementingproperti publik pada model Anda ke false.


-3

Untuk menetapkan kunci utama Anda harus ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.