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?

Vuk Stanković
sumber

Jawaban:

191

Iya

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
phirschybar
sumber
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

pengguna3186817
sumber
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;

}
Toby Mellor
sumber
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';

}
ajtrichards
sumber
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.

Nyai
sumber
-3

Untuk menetapkan kunci utama Anda harus ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Jay Momaya
sumber