在 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。我发现一些建议说要向模型添加主键函数,所以我尝试了
public function primaryKey()
{
return 'id';
}
id 是列名,它实际上是底层 table 中的 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 为数据库视图生成代码?
我想到的最简单的解决方法是创建 table,它与您想要的结构具有相同的结构(带有主键字段)。使用 table 创建您的 CRUD。现在只需将新创建的 table 替换为 View.
我曾经遇到过同样的问题。您需要将函数 getPrimaryKey 添加到您的模型 class.
public function getPrimaryKey($asArray=false){
return "id";
}
您可以在此处找到更多详细信息:
http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#getPrimaryKey()-detail
这应该允许您使用 CRUD 生成器并处理 "undefined index: i" 错误。
简单地添加到您的模型中class
public static function primaryKey()
{
return ['id'];
}
错误是关于 mysql,您的 table 应该在 table 中有一个 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_Id
是 PRIMARY KEY
,
反过来,
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
不行。
解决这个问题的关键是让你的table至少有一个PRIMARY KEY
属性。
我使用 mariadb 视图的 gii 生成了一个模型,它有效。
然后尝试对模型使用 gii CRUD 生成器,我收到错误
The table associated with app\models\Future must have primary key(s).
完全可以理解,因为视图没有 PK。我发现一些建议说要向模型添加主键函数,所以我尝试了
public function primaryKey()
{
return 'id';
}
id 是列名,它实际上是底层 table 中的 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 为数据库视图生成代码?
我想到的最简单的解决方法是创建 table,它与您想要的结构具有相同的结构(带有主键字段)。使用 table 创建您的 CRUD。现在只需将新创建的 table 替换为 View.
我曾经遇到过同样的问题。您需要将函数 getPrimaryKey 添加到您的模型 class.
public function getPrimaryKey($asArray=false){
return "id";
}
您可以在此处找到更多详细信息: http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#getPrimaryKey()-detail
这应该允许您使用 CRUD 生成器并处理 "undefined index: i" 错误。
简单地添加到您的模型中class
public static function primaryKey()
{
return ['id'];
}
错误是关于 mysql,您的 table 应该在 table 中有一个 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_Id
是 PRIMARY KEY
,
反过来,
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
不行。
解决这个问题的关键是让你的table至少有一个PRIMARY KEY
属性。