Thay đổi khóa chính mặc định trong Eloquent


92

Tôi có thể thay đổi khóa chính của Eloquent model không.

Ví dụ: tôi muốn đặt khóa chính admin_idthay vì 'id'?

Tôi biết tôi có thể thay đổi tên bảng cho mô hình như

protected $table = "admin";

Có cái gì đó tương tự cho khóa chính không?

Câu trả lời:


190

Đúng

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
Đối với bất kỳ ai khác tham khảo câu hỏi này, hãy sử dụng một trong các câu trả lời khác. $primarykeyphải là $primaryKey(chữ hoa K) và sẽ không hoạt động nếu không.
Jeremy Harris

4
Điều gì xảy ra nếu tôi có nhiều trường làm khóa chính?
Bagusflyer

@bagusflyer Bạn đang đùa phải không? Nhiều hơn một khóa chính trong một bảng cơ sở dữ liệu?
Novica89

@bagusflyer hùng biện không hỗ trợ phím composite, nhưng đây là một cách giải quyết tốt để bạn có thể có $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922

Chỉ FYI, có vẻ như trong Laravel 5.4, bạn không cần đặt PK của riêng mình nữa nếu nó giống với tên mô hình khi nó thêm nó cho bạn (và nếu không sẽ xảy ra lỗi).
Mint

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

nhưng

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

lưu ý ký tự K (viết hoa) trên biến $ primaryKey


9

Nếu bạn muốn sử dụng khóa tổng hợp (một chuỗi)

Bạn cần đảm bảo rằng bạn đã đặt public $incrementing = falsenếu không laravel sẽ truyền trường thành Số nguyên, cho0

class User extends Model {

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

}

Tôi đã ghi đè lên primaryKey dưới dạng chuỗi văn bản col - giá trị trong bộ sưu tập là chính xác nhưng khi tôi tham chiếu col dưới dạng $ results-> primary_key, nó sẽ chỉ trả về 0 mặc dù bộ sưu tập / mảng hiển thị chuỗi chính xác - mất một lúc để theo dõi nó khi tôi nhận thấy rằng PrimaryKey đang hiển thị dưới dạng INT và Tăng dần trong Đối tượng. Phải đặt công khai $ incremental = false.
G-Man

7

Biến khóa chính có phân biệt chữ hoa chữ thường và phải $primaryKeyhoạt động.

Thí dụ:

protected $primaryKey = 'your_primary_key_id';

Ví dụ trong lớp Model:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
Tôi vẫn phải thêm nó vào mảng $ có thể lấp đầy?
Anis

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Theo tài liệu Laravel:


Eloquent cũng sẽ giả định rằng mỗi bảng có một cột khóa chính được đặt tên id. Bạn có thể xác định một thuộc $primaryKeytính để ghi đè quy ước này.

Ngoài ra, Eloquent giả định rằng khóa chính là một giá trị số nguyên tăng dần, có nghĩa là theo mặc định, khóa chính sẽ tự động được chuyển thành int. Nếu bạn muốn sử dụng khóa chính không tăng hoặc không phải số, bạn phải đặt thuộc tính công khai $incrementingtrên mô hình của mình thành false.


-3

Để gán một khóa chính, bạn nên ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.