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_id
thay 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?
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_id
thay 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:
Đúng
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
$primaryKey = array('key1', 'key1');
github.com/laravel/framework/issues/5517#issuecomment-52996610
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
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 = false
nế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;
}
Biến khóa chính có phân biệt chữ hoa chữ thường và phải $primaryKey
hoạ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';
}
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 $primaryKey
tí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 $incrementing
trên mô hình của mình thành false.
Để gán một khóa chính, bạn nên ..->
class User extends Eloquent {
protected $primaryKey='admin_id';
}
$primarykey
phải là$primaryKey
(chữ hoa K) và sẽ không hoạt động nếu không.