【发布时间】:2013-11-30 14:17:39
【问题描述】:
我可以更改 Eloquent 模型的主键吗?
我想设置主键,例如 admin_id 而不是 'id'?
我知道我可以更改模型的表名,例如
protected $table = "admin";
主键有类似的吗?
【问题讨论】:
我可以更改 Eloquent 模型的主键吗?
我想设置主键,例如 admin_id 而不是 'id'?
我知道我可以更改模型的表名,例如
protected $table = "admin";
主键有类似的吗?
【问题讨论】:
是的
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
【讨论】:
$primarykey 应该是 $primaryKey(大写字母 K),否则将不起作用。
$primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
如果您想使用复合键(字符串)
您需要确保设置了 public $incrementing = false 否则 laravel 会将字段转换为整数,从而给出 0
class User extends Model {
protected $primaryKey = 'my_string_key';
public $incrementing = false;
}
【讨论】:
class User extends Eloquent {
protected $primarykey = 'admin_id';
}
但是
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
注意变量 $primaryKey 上的字母 K(大写)
【讨论】:
主键变量区分大小写,必须为$primaryKey 才能工作。
例子:
protected $primaryKey = 'your_primary_key_id';
模型类中的示例:
class User extends Eloquent {
protected $primaryKey = 'your_primary_key_id';
}
【讨论】:
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
根据 Laravel 文档:
Eloquent 还会假设每个表都有一个名为 id 的主键列。你可以定义一个$primaryKey 属性来覆盖这个约定。
此外,Eloquent 假设主键是一个递增的整数值,这意味着默认情况下主键会自动转换为 int。如果您希望使用非递增或非数字主键,您必须将模型上的公共 $incrementing 属性设置为 false。
【讨论】:
要分配主键,您应该:
class User extends Eloquent {
protected $primaryKey = 'admin_id';
}
【讨论】: