Eloquent'te varsayılan birincil anahtarı değiştirin


94

Eloquent model birincil anahtarını değiştirebilir miyim?

Örneğin admin_id'id' yerine birincil anahtar ayarlamak istiyorum ?

Model için tablo adını değiştirebileceğimi biliyorum

protected $table = "admin";

Birincil anahtar için benzer bir şey var mı?

Yanıtlar:


191

Evet

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
Bu soruyu referans alan başka biri için, diğer cevaplardan birini kullanın. $primarykeyolmalıdır $primaryKey(büyük K harfi) ve aksi halde çalışmaz.
Jeremy Harris

4
Birincil anahtar olarak birden fazla alanım varsa ne olur?
Bagusflyer

@bagusflyer Şaka yapıyorsun değil mi? Bir veritabanı tablosunda birden fazla birincil anahtar mı var?
Novica89

@bagusflyer Eloquent, bileşik anahtarları desteklemez, ancak işte size $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

Bilginize, Laravel 5.4'te sizin için eklediği model adıyla aynıysa artık kendi PK'nizi ayarlamanıza gerek yok gibi görünüyor (aksi takdirde hata verecektir).
Darphane

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

fakat

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

$ primaryKey değişkenindeki K harfini (büyük harf) not edin


11

Bileşik anahtar (bir dize) kullanmak istiyorsanız

public $incrementing = falseAksi takdirde, laravel alanı bir Tamsayıya çevirecek şekilde ayarladığınızdan emin olmalısınız.0

class User extends Model {

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

}

Bir metin dizesi sütun olarak birincilKey üzerinde bir geçersiz kılma yaptım - koleksiyondaki değer doğruydu ancak sütuna $ sonuçlar-> birincil_anahtar olarak başvurduğumda, koleksiyon / dizi doğru dizeyi göstermesine rağmen yalnızca sıfır döndürürdü - bir süre aldı PrimaryKey'in Nesnede INT ve Arttırılabilir olarak gösterildiğini fark ettiğimde onu takip et. Public $ incrementing = false olarak ayarlanmalıydı.
G-Man

7

Birincil anahtar değişken büyük / küçük harfe duyarlıdır ve $primaryKeyçalışması gerekir .

Misal:

protected $primaryKey = 'your_primary_key_id';

Model sınıfı içindeki örnek:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
Yine de onu $ doldurulabilir diziye eklemem gerekiyor mu?
Anis

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Laravel belgelerine göre:


Eloquent ayrıca, her tablonun adlandırılmış bir birincil anahtar sütununa sahip olduğunu varsayacaktır id. $primaryKeyBu kuralı geçersiz kılmak için bir özellik tanımlayabilirsiniz .

Ayrıca, Eloquent birincil anahtarın artan bir tamsayı değeri olduğunu varsayar, bu da varsayılan olarak birincil anahtarın otomatik olarak int'e dönüştürüleceği anlamına gelir. Artışsız veya sayısal olmayan bir birincil anahtar kullanmak isterseniz $incrementing, modelinizdeki public özelliğini false olarak ayarlamanız gerekir .


-3

Bir birincil anahtar atamak için yapmanız gerekenler ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.