เปลี่ยนคีย์หลักเริ่มต้นใน Eloquent


94

ฉันสามารถเปลี่ยนคีย์หลักรุ่น Eloquent ได้ไหม

ฉันต้องการตั้งค่าคีย์หลักเช่นadmin_idแทนที่จะเป็น 'id'?

ฉันรู้ว่าฉันสามารถเปลี่ยนชื่อตารางสำหรับรุ่นที่ชอบได้

protected $table = "admin";

คีย์หลักมีอะไรคล้ายกันไหม

คำตอบ:


191

ใช่

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
สำหรับใครก็ตามที่อ้างถึงคำถามนี้ให้ใช้คำตอบอื่น ๆ $primarykeyควรเป็น$primaryKey(ตัวพิมพ์ใหญ่ K) และจะใช้ไม่ได้
Jeremy Harris

4
จะเกิดอะไรขึ้นถ้าฉันมีมากกว่าหนึ่งฟิลด์เป็นคีย์หลัก
Bagusflyer

@bagusflyer คุณล้อเล่นใช่มั้ย? มีคีย์หลักมากกว่าหนึ่งรายการในตารางฐานข้อมูลเดียวหรือไม่
Novica89

@bagusflyer Eloquent ไม่รองรับคีย์คอมโพสิต แต่นี่เป็นวิธีแก้ปัญหาที่ดีเพื่อให้คุณสามารถมี$primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

เพียงแค่ FYI ดูเหมือนว่าใน Laravel 5.4 คุณไม่จำเป็นต้องตั้งค่า PK ของคุณเองอีกต่อไปหากมันเหมือนกับชื่อรุ่นตามที่มันเพิ่มให้คุณ (และจะผิดพลาดเป็นอย่างอื่น)
โรงกษาปณ์

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

แต่

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

สังเกตตัวอักษร K (ตัวพิมพ์ใหญ่) บนตัวแปร $ primaryKey


11

หากคุณต้องการใช้คีย์ผสม (สตริง)

คุณต้องแน่ใจว่าคุณได้ตั้งค่าpublic $incrementing = falseมิฉะนั้น laravel จะส่งฟิลด์เป็นจำนวนเต็มโดยให้0

class User extends Model {

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

}

ฉันได้แทนที่ primaryKey เป็นสตริงข้อความ - ค่าในคอลเลกชันถูกต้อง แต่เมื่อฉันอ้างถึง col เป็น $ results-> primary_key มันจะส่งคืนศูนย์เท่านั้นแม้ว่าคอลเลกชัน / อาร์เรย์จะแสดงสตริงที่ถูกต้อง - ใช้เวลาสักครู่ในการ ติดตามมันเมื่อฉันสังเกตเห็นว่า primaryKey แสดงเป็น INT และ Incrementable ใน Object ต้องตั้งค่าสาธารณะ $ Incrementing = false
G-Man

7

ตัวแปรคีย์หลักเป็นแบบคำนึงถึงขนาดตัวพิมพ์และต้องใช้$primaryKeyงานได้

ตัวอย่าง:

protected $primaryKey = 'your_primary_key_id';

ตัวอย่างภายในคลาส Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
ฉันยังต้องเพิ่มอาร์เรย์ $ fillable หรือไม่
Anis

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

ตามเอกสารของ Laravel:


idฝีปากยังจะสมมติว่าแต่ละตารางมีคอลัมน์คีย์หลักชื่อ คุณอาจกำหนด$primaryKeyคุณสมบัติเพื่อลบล้างข้อตกลงนี้

นอกจากนี้ Eloquent ยังถือว่าคีย์หลักเป็นค่าจำนวนเต็มที่เพิ่มขึ้นซึ่งหมายความว่าโดยค่าเริ่มต้นคีย์หลักจะถูกส่งเป็น int โดยอัตโนมัติ หากคุณต้องการใช้คีย์หลักแบบไม่เพิ่มหรือไม่ใช่ตัวเลขคุณต้องตั้งค่า$incrementingคุณสมบัติสาธารณะในโมเดลของคุณเป็นเท็จ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.