使用Yii2中的Gii从数据库视图创建CRUD


Create a CRUD from a database view using Gii in Yii2

我使用mariadb视图的gii生成了一个模型,它很有效。

然后尝试使用该模型的gii CRUD生成器,我得到了错误

The table associated with app'models'Future must have primary key(s).

这是完全可以理解的,因为视图没有PK。我发现了一些建议,说要在模型中添加primaryKey函数,所以我尝试了

public function primaryKey()
{
    return 'id';
}

id是列名,它实际上是基础表中的PK,它是视图的一部分。但这失败了一个例外

Cannot make static method yii'db'ActiveRecord::primaryKey() non static in class app'models'Future

所以我试着让这个方法成为静态的,但它随后抛出了新的异常

Undefined index: i
1. in /home/adrian/projects/mtview/mtview/vendor/yiisoft/yii2-gii/generators/crud/Generator.php at line 509

有没有办法解决这个问题,或者现在不可能使用gii为数据库视图生成代码?

简单地添加到您的模型类

 public static function primaryKey()
{
    return ['id'];
}

我曾经遇到过同样的问题。您需要将函数getPrimaryKey添加到您的模型类中。

public function getPrimaryKey($asArray=false){
    return "id";
}

您可以在此处找到更多详细信息:http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#getPrimaryKey()-详细

这应该允许您使用CRUD生成器,并处理"未定义索引:i"错误。

这个错误是关于mysql的,您的表中应该有一个PRIMARY KEY

CREATE TABLE Persons (
    P_Id int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (P_Id)    
);

是OK,因为P_IdPRIMARY KEY

相反,

CREATE TABLE Persons (
    PersonID int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255) 
);

不正常。

解决这个问题的关键是让表至少有一个PRIMARY KEY属性。

我想到的最简单的解决方案是创建与您想要的表结构相同的表(带有主键字段)。使用该表创建CRUD。现在只需将新创建的表替换为View即可。