【问题标题】:How to generate gii crud Yii2 without Primary Key?如何在没有主键的情况下生成 gii crud Yii2?
【发布时间】:2019-02-25 08:14:30
【问题描述】:

如何在没有主键的情况下生成 crud,因为我的数据库,这个表没有主键。只有FK。 当我尝试生成它会是这样的 image.

感谢您的帮助。

【问题讨论】:

  • 嗯...没有主键的 CRUD?以及如何在没有 PK 的情况下进行更新、创建或删除?
  • 有一个待定的增强功能,其中包括在生成模型时询问主键以防当前没有任何主键,这对views 也很有用,请参阅here 但你需要一个

标签: database yii2 crud gii


【解决方案1】:

我认为,没有PK的情况下使用CRUD不太好。但是,如果没有其他选项,您可以暂时将假 PK 变量添加到表中,并在生成后将其删除。您应该更改一些代码以转义生成文件(控制器和视图)上的错误,以删除对该假变量的引用。而且你应该更加小心,因为,你可以更新或删除一些其他记录而不是需要一个

更新

假设 DB 结构是这样的one 并且您应该为表 'othertable' 生成 CRUD,您可以:

  1. 将 PK 作为“id”添加到table
  2. 重新生成模型“Othertable
  3. 为“othertable”生成 CRUD
  4. 从表中删除 id
  5. 重新生成“Othertable
  6. 将这些行添加到“Othertable”:

    //模仿id 公共$id; //重新声明初始化 公共函数初始化(){ 父::init(); $this->id= $this->sometable_id; } // 重新声明主键。对于这种情况 sometable_id // 已选择为主 // 钥匙。我们可以改变它 公共静态函数primaryKey(){ 返回 ['sometable_id']; }
  7. OthertableSearch 模型中移除 id

  8. OthertableController 上的 findModel($id) 方法更改为:

受保护的函数 findModel($id) { if (($model = Othertable::find()->where(['sometable_id'=>$id])->one()) !== null) { $model->id=$model->sometable_id; 返回$模型; } throw new NotFoundHttpException('请求的页面不存在'); }

注意事项

在这个例子中,我使用了“othertable”的sometable_id,假设表上只有一条记录具有这个sometable_id值(例如唯一),否则每次你都可以获得第一条记录并更改/删除,而不是需要一个。它可以更改为表的其他唯一变量。如果你想使用其他变量,你应该改变模型和控制器的 findModel() 方法。

【讨论】:

  • 请使用在生成的文件中转义错误的方法改进您的答案
猜你喜欢
  • 1970-01-01
  • 2016-09-15
  • 2019-03-03
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多