Yii2 Advanced Отображение и сохранение полей двух таблиц в одной форме

Как я могу отображать поля разных таблиц в одной форме и сразу сохранять их в базе данных... Сценарий заключается в том, что когда я получаю новую форму для заполнения, эти две таблицы объединятся в одну и ту же ФОРМУ и, вероятно, сохранятся в одном и том же время. Вторая проблема заключается в том, что «id» (PK) «form» будет генерировать число постепенно после сохранения. Вопрос в том, как я могу скопировать значение «id» (PK) в «form» в «forminfo_info» (FK) при сохранении... Пожалуйста, нужна помощь в этом..

введите здесь описание изображения


person Mang Jose    schedule 28.04.2016    source источник
comment
Вы могли бы показать изображение на самом деле ...   -  person Ian    schedule 28.04.2016
comment
Вы можете просмотреть изображение. ссылка была в тексте...   -  person Mang Jose    schedule 28.04.2016
comment
Нвм, я сделал это за тебя. Смысл в том, чтобы разместить изображение и ваш вопрос на одной странице, чтобы людям было легче увидеть изображение и связать его с вашим вопросом. Добро пожаловать в переполнение стека!   -  person Ian    schedule 28.04.2016
comment
Спасибо... Пожалуйста, помогите мне в этом, пожалуйста? Сценарий: когда я получаю новую форму для заполнения, эти две таблицы объединятся в одну и ту же форму и, вероятно, сохранятся одновременно. Вторая проблема заключается в том, что идентификатор формы будет генерировать число постепенно после сохранения. Вопрос в том, как я могу скопировать значение идентификатора в форме в forminfo_info (FK) при сохранении... Пожалуйста, нужна помощь в этом...   -  person Mang Jose    schedule 28.04.2016
comment
Нет, я не понимаю вопроса на самом деле. Но я увидел ваш пост, потому что делал обзор на First Posts. Вот почему я прокомментировал только формат вашего вопроса. Извиняюсь...   -  person Ian    schedule 28.04.2016
comment
Ok. Но все равно спасибо..... Есть кто-нибудь, кто мог бы мне в этом помочь???????   -  person Mang Jose    schedule 28.04.2016
comment
Должен быть кто-то, кто может вам помочь... Но более важно, чтобы ваш пост увидело больше людей, если вы хотите повысить вероятность того, что ваш вопрос будет замечен и вы получите необходимую помощь. Один из способов сделать это — добавить к тегу более популярный, но релевантный тег, а не только конкретную технологию. Например, база данных, yii2 и т. д. Но будьте осторожны, задавая свой вопрос. Плохой/дублирующийся вопрос, как правило, получает отрицательную оценку и/или закрывается очень быстро, если его замечают другие. Поэтому, пожалуйста, задавайте хорошие вопросы, избегайте дублирования вопросов (выполните поиск на сайте) и добавляйте соответствующий тег. Надеюсь, поможет   -  person Ian    schedule 28.04.2016


Ответы (1)


Большая часть вашего вопроса действительно объяснена здесь, в руководстве по Yii2.

В любом случае, вот что я бы попробовал в вашем actionUpdate/actionCreate-controller. (Примечание: этот код не тестировался, поэтому могут потребоваться некоторые исправления, но общая структура должна работать.)

// Create empty models, typically for actionCreate()
$m1 = new Model();
$m2 = new AnotherModel();

// ...or load models using ids for actionUpdate($m1Id, $m2Id)
$m1 = Model::findOne($m1Id);
$m2 = AnotherModel::findOne($m2Id);

// Try to populate the models from the request
if ($m1->load(Yii::$app->request->post()) && $m2->load(Yii::$app->request->post())) {
    // Models now loaded, but not validated
    if ($m1->validate() && $m2->validate()) {
         // Both models are now validated, save the first one
         $m1->save(false);    // No need to validate again
         // Now Model has an id, save its id as a reference in AnotherModel
         $m2->m1Id = $m1->id;
         // ...or create a method in your Model-model for setting the foreign key
         // $m2->connectModel($m1);  // The fancier object oriented way
         $m2->save(false);   // Set true if you validate the foreign key
    }
}

// Return view for rendering

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

person karpy47    schedule 28.04.2016