Есть таблица laboratory (id, laboratory_name). Есть таблица prefix (id, prefix). Есть таблица laboratory_prefix (id, laboratory_id, prefix_id) - в ней описываются все сочетания значений двух предыдущих таблиц. И есть таблица samples (id, laboratory_prefix_id и др.), в которой записан выбор сочетания лаборатории и префикса.
Пытаюсь сделать форму, в которой можно было бы выбрать в выпадающем списке лабораторию. Потом для этой лаборатории допустимый префикс. А при сабмите как-то записать laboratory_prefix_id в таблицу samples.
Что есть - есть 4 модели под все таблицы. Класс с методом, который создаём объект модели Sample и отдаём виду, где я и пытаюсь создать форму. Можно, конечно, нагородить кучу js и т.п., но как-то же это можно сделать и аккуратно? Подскажите, пожалуйста, как быть? Получается, что нужно в вид (или создавать в виде) три модели? - одну для того, чтобы создать поля модели Sample; вторую, чтобы вывести выпадающий список данных из таблицы laboratory и создать выпадающий список этот на основе модели Laboratory. Ну и третью также, соответственно?
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($sampleModel, 'id')->input('hidden', ['placeholder' => $sampleModel->getAttributeLabel('id'), 'readonly' => 'readonly', 'id' => 'sample_id'])->label(false) ?>
<?php
$laboratoryModel=new \app\models\Laboratory();
$authors = $laboratoryModel->find()->asArray()->all();
$items = ArrayHelper::map($authors,'id','laboratory_name');
$params = [
'prompt' => 'Выберите лабораторию'
];
echo $form->field($laboratoryModel, 'id')->dropDownList($items,$params);
$prefixModel=new \app\models\Prefix();
$params = [
'prompt' => 'Выберите префикс'
];
echo $form->field($prefixModel, 'id')->dropDownList([], $params);
?>
...
А потом вещать аякс, получать после выбора лаборатории в списке? запрашивать его данные, выводить. Потом на сервере принимать, искать вручную laboratory_prefix_id на основе полученных из формы prefix_id и laboratory_id? Так, получается???
Или забить к черту на вывод формы из трёх моделей и в виде сделать её по-старинке. А на стороне экшена принимать данные и вручную их разносить потом по моделям?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей