更改雄辩的默认主键


Answers:


190

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
对于其他任何引用此问题的人,请使用其他答案之一。$primarykey应该为$primaryKey(大写字母K),否则将无法正常工作。
杰里米·哈里斯

4
如果我有多个字段作为主键怎么办?
Bagusflyer 2014年

@bagusflyer你在开玩笑吧?一个数据库表中有多个主键?
2014年

@bagusflyer Eloquent不支持复合键,但这是一个不错的解决方法,因此您可以使用$primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922 2015年

仅供参考,在Laravel 5.4中,如果它与为您添加的模型名称相同,则不再需要设置您自己的PK(否则将出错)。
薄荷

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

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


9

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

您需要确保设置,public $incrementing = false否则laravel会将字段强制转换为Integer,0

class User extends Model {

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

}

我在primaryKey上做了覆盖,将其作为文本字符串col-集合中的值正确,但是当我将col引用为$ results-> primary_key时,尽管集合/数组显示了正确的字符串,但它仅返回零-花了一段时间当我发现primaryKey在对象中显示为INT和Incrementable时,对其进行跟踪。必须设置公共$ incrementing = false。
G人

7

主键变量区分大小写,并且必须$primaryKey起作用。

例:

protected $primaryKey = 'your_primary_key_id';

Model类中的示例:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
我还需要将其添加到$ fillable数组中吗?
阿尼斯(Anis)2016年

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

根据Laravel文档:


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

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


-3

要分配主键,您应该..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.