yii2更新没有主键的表

Muh*_*lam 2 yii2 yii2-advanced-app

我有一个名为SYSTEM_PARAMS如下的表格

+------------+------------------+------+-----+---------------------+-----------------------------+
| Field      | Type             | Null | Key | Default             | Extra                       |
+------------+------------------+------+-----+---------------------+-----------------------------+
| name       | varchar(50)      | NO   |     | NULL                |                             |
| value      | varchar(100)     | YES  |     | NULL                |                             |
| updated_at | timestamp        | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                             |
| created_by | int(11)          | NO   |     | NULL                |                             |
| updated_by | int(11) unsigned | YES  |     | 0                   |                             |
+------------+------------------+------+-----+---------------------+-----------------------------+
Run Code Online (Sandbox Code Playgroud)

在这里,我拥有要运行的cron作业的所有名称,并且必须使用当前运行的特定作业名称来更新该值JobId,该表没有primaryKey定义,如您在上面的架构中所见,因此我primaryKey()在模型内部定义了方法像下面

 public function primaryKey($asArray=FALSE) {
        return 'name';
    }
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误,说我可以将静态方法定义为非静态方法,在这里我做错了什么。

PHP致命错误:无法在类common \ models \ SystemParams中使静态方法yii \ db \ ActiveRecord :: primaryKey()非静态

Biz*_*ley 6

确切地说。

primaryKey 是ActiveRecord类中的静态方法。

如果要覆盖它,则还必须使其静态。

public static function primaryKey()
{
    return ['name'];
}
Run Code Online (Sandbox Code Playgroud)

PS。它必须返回数组。请参阅此注释