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

时间:2016-03-24 03:59:25

标签: php yii2 crud gii

我使用gii of mariadb视图生成了一个模型,该模型有效。

然后尝试将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为数据库视图生成代码?

4 个答案:

答案 0 :(得分:4)

简单添加到您的Model类

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

答案 1 :(得分:3)

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

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

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

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

答案 2 :(得分:1)

该错误与 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)    
);

可以,因为P_IdPRIMARY KEY

相反,

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

不好。

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

答案 3 :(得分:-3)

我想到的最简单的工作方式是,创建与您想要的结构相同的表(使用主键字段)。使用该表创建您的CRUD。现在只需用View替换新创建的表。

相关问题