Laravel使用自定义PK数组销毁方法

时间:2018-06-25 12:00:08

标签: php laravel eloquent laravel-5.6

在官方文档中,我可以看到一种方法destroy,您可以在其中放置主键列表,并删除该列表中的所有数据。

ModelName::destroy([1,2,3]);

但是,如果我们有自定义PK怎么办?我尝试使用名为code的字段来完成此操作,该字段是一个字符串,但是它说:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause'  (SQL: select * from `paises` where `id` in ())

有没有办法告诉Laravel主键没有叫做id

类似

ModelName::destroy(['AL', 'ES', 'FR'], 'code');

1 个答案:

答案 0 :(得分:2)

来自documentation

  

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

因此,在您的模型中:

class User extends Model
{

    protected $primaryKey = 'yourPrimaryKey';
}

由于您似乎使用的是基于字符串的PK,因此文档中的以下段落也很重要。

  

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

因此您的模型还应该包括:

protected $incrementing = false;
protected $keyType      = 'string';