ChatGPT解决这个技术问题 Extra ChatGPT

更改 Eloquent 中的默认主键

我可以更改 Eloquent 模型的主键吗?

我想设置主键,例如 admin_id 而不是“id”?

我知道我可以更改模型的表名,例如

protected $table = "admin";

主键有类似的东西吗?


p
phirschybar

是的

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

对于引用此问题的其他任何人,请使用其他答案之一。 $primarykey 应该是 $primaryKey(大写字母 K),否则将不起作用。
如果我有多个字段作为主键怎么办?
@bagusflyer 你在开玩笑吧?一个数据库表中有多个主键?
@bagusflyer Eloquent 不支持复合键,但这是一个很好的解决方法,因此您可以使用 $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
仅供参考,在 Laravel 5.4 中,如果它与为您添加的模型名称相同,则不再需要设置自己的 PK(否则会出错)。
u
user8555937

如果您想使用复合键(字符串)

您需要确保设置了 public $incrementing = false 否则 laravel 会将字段转换为整数,给出 0

class User extends Model {

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

}

我将primaryKey作为文本字符串col进行了覆盖-集合中的值是正确的,但是当我将col引用为$results->primary_key时,尽管集合/数组显示了正确的字符串,但它只会返回零-花了一段时间才当我注意到primaryKey 在Object 中显示为INT 和Incrementable 时,跟踪它。必须设置 public $incrementing = false。
u
user3186817
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

注意变量 $primaryKey 上的字母 K(大写)


a
ajtrichards

主键变量区分大小写,必须为 $primaryKey 才能工作。

例子:

protected $primaryKey = 'your_primary_key_id';

模型类中的示例:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

我还需要将它添加到 $fillable 数组吗?
G
Gammer
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

根据 Laravel 文档:

Eloquent 还会假设每个表都有一个名为 id 的主键列。您可以定义一个 $primaryKey 属性来覆盖此约定。

此外,Eloquent 假设主键是一个递增的整数值,这意味着默认情况下主键会自动转换为 int。如果您希望使用非递增或非数字主键,您必须将模型上的公共 $incrementing 属性设置为 false。


M
Mahmoud Abdelsattar

要分配主键,您应该:

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}