如何在没有主键的情况下生成 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 =]',你可以:

  1. 将 PK 作为 "id" 添加到 table
  2. 重新生成模型“其他table
  3. 为“othertable”生成 CRUD“
  4. 从 table
  5. 中删除 ID
  6. 重新生成“其他table
  7. 将这些行添加到“其他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'];
    }
    
  8. 其他table搜索中删除id型号

  9. 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() 方法。