如何在没有主键的情况下生成 gii crud Yii2?
How to generate gii crud Yii2 without Primary Key?
我如何生成没有主键的 crud,因为我的数据库,这个 table 没有主键。只有FK。
当我尝试生成它时会像这样
image.
感谢您的帮助。
我觉得,没有PK就用CRUD不是很好。但是,如果没有其他选择,您可以临时将假 PK 变量添加到 table 并在生成后删除它。您应该更改一些代码来避免生成的文件(控制器和视图)上的错误,从而删除对该假变量的引用。而且你应该更加小心,因为你可以更新或删除一些其他记录而不是需要一个
更新
假设数据库结构是这样的one你应该为table'othertable[=54生成CRUD =]',你可以:
- 将 PK 作为 "id" 添加到 table
- 重新生成模型“其他table”
- 为“othertable”生成 CRUD“
- 从 table
中删除 ID
- 重新生成“其他table”
将这些行添加到“其他table”:
//imitate id
public $id;
//rediclare init
public function init() {
parent::init();
$this->id= $this->sometable_id;
}
// Rediclare primary key. For this condition sometable_id
// have chosen as primary
// key. We can change it
public static function primaryKey() {
return ['sometable_id'];
}
从其他table搜索中删除id型号
将 OthertableController 上的 findModel($id) 方法更改为:
protected function findModel($id)
{
if (($model = Othertable::find()->where(['sometable_id'=>$id])->one()) !== null) {
$model->id=$model->sometable_id;
return $model;
}
throw new NotFoundHttpException('The requested page does not exist.');
}
关注
在此示例中,我使用了“othertable”的 sometable_id,假设 table 上只有一条记录这个 sometable_id 值(a.g. 唯一),否则每次你都可以获得第一条记录,而 change/delete 则需要一条记录。它可以更改为 table 的其他唯一变量。如果你想使用其他变量,你应该改变模型和控制器的 findModel() 方法。
我如何生成没有主键的 crud,因为我的数据库,这个 table 没有主键。只有FK。 当我尝试生成它时会像这样 image.
感谢您的帮助。
我觉得,没有PK就用CRUD不是很好。但是,如果没有其他选择,您可以临时将假 PK 变量添加到 table 并在生成后删除它。您应该更改一些代码来避免生成的文件(控制器和视图)上的错误,从而删除对该假变量的引用。而且你应该更加小心,因为你可以更新或删除一些其他记录而不是需要一个
更新
假设数据库结构是这样的one你应该为table'othertable[=54生成CRUD =]',你可以:
- 将 PK 作为 "id" 添加到 table
- 重新生成模型“其他table”
- 为“othertable”生成 CRUD“
- 从 table 中删除 ID
- 重新生成“其他table”
将这些行添加到“其他table”:
//imitate id public $id; //rediclare init public function init() { parent::init(); $this->id= $this->sometable_id; } // Rediclare primary key. For this condition sometable_id // have chosen as primary // key. We can change it public static function primaryKey() { return ['sometable_id']; }
从其他table搜索中删除id型号
将 OthertableController 上的 findModel($id) 方法更改为:
protected function findModel($id) { if (($model = Othertable::find()->where(['sometable_id'=>$id])->one()) !== null) { $model->id=$model->sometable_id; return $model; } throw new NotFoundHttpException('The requested page does not exist.'); }
关注
在此示例中,我使用了“othertable”的 sometable_id,假设 table 上只有一条记录这个 sometable_id 值(a.g. 唯一),否则每次你都可以获得第一条记录,而 change/delete 则需要一条记录。它可以更改为 table 的其他唯一变量。如果你想使用其他变量,你应该改变模型和控制器的 findModel() 方法。