Я думаю, не очень хорошо использовать CRUD без ПК.Но, если нет других опций, вы можете временно добавить поддельную переменную PK в таблицу и после генерации удалить ее.Вам следует изменить код, чтобы избежать ошибок в сгенерированных файлах (контроллере и представлениях), чтобы удалить ссылки на эту ложную переменную.И вам следует быть более осторожным, потому что вы можете обновить или удалить какую-то другую запись вместо необходимой
Обновление
Предполагая, что структура БД похожа на эту один , и вы должны сгенерировать CRUD для таблицы ' othertable ', вы можете:
- добавить PK в качестве "id" к table
- регенерировать модель " Othertable "
- генерировать CRUD для " othertable "
- Удалить идентификатор из таблицы
- Восстановить " Другие данные "
Добавить эти строки в " Другие таблицы ":
//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'];
}
Удалить id из OthertableSearch модель
Изменить 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 () контроллера.