Как сгенерировать gii crud Yii2 без первичного ключа? - PullRequest
0 голосов
/ 25 февраля 2019

Как я могу сгенерировать грубый без первичного ключа, потому что, моя база данных, эта таблица не имеет первичного ключа.есть только ФК.когда я пытаюсь сгенерировать, это будет выглядеть так: image .

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 25 февраля 2019

Я думаю, не очень хорошо использовать CRUD без ПК.Но, если нет других опций, вы можете временно добавить поддельную переменную PK в таблицу и после генерации удалить ее.Вам следует изменить код, чтобы избежать ошибок в сгенерированных файлах (контроллере и представлениях), чтобы удалить ссылки на эту ложную переменную.И вам следует быть более осторожным, потому что вы можете обновить или удалить какую-то другую запись вместо необходимой

Обновление

Предполагая, что структура БД похожа на эту один , и вы должны сгенерировать CRUD для таблицы ' othertable ', вы можете:

  1. добавить PK в качестве "id" к table
  2. регенерировать модель " Othertable "
  3. генерировать CRUD для " othertable "
  4. Удалить идентификатор из таблицы
  5. Восстановить " Другие данные "
  6. Добавить эти строки в " Другие таблицы ":

    
    //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'];
    }
    
  7. Удалить id из OthertableSearch модель

  8. Изменить findModel ($ id) метод OthertableController as:

 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.');
    }

Attentions

В этом примере я использовал sometable_id для " othertable"при условии, что наТаблица с этим значением sometable_id (ag уникальным), в противном случае каждый раз, когда вы можете получить первую запись и изменить / удалить ее, вместо этого нужна.Его можно изменить на другую уникальную переменную (и) таблицы.Если вы хотите использовать другую переменную, вам следует поменять на модель и на метод findModel () контроллера.

...