如何在没有主键的情况下生成gii crud Yii2?

时间:2019-02-25 08:14:30

标签: database yii2 crud gii

我如何生成粗略的主键,因为我的dabatase,此表没有主键。只有FK。 当我尝试生成它时会像这样 image

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

更新

假设数据库结构是这样的one,并且您应该为表“ othertable ”生成CRUD,则可以:

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

    
    //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'];
    }
    
  8. OthertableSearch 模型

  9. 中删除 id
  10. 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,假设表上只有一个记录带有此sometable_id值(ag唯一),否则每次获取第一条记录并进行更改/删除,而需要一个。可以将其更改为表的其他唯一变量。如果要使用其他变量,则应更改控制器的模型和findModel()方法。