Задать вопрос
@denop
Изучаю Yii2 / Vue.js

Yii2 — вывод по категориям + форма (три таблицы)?

Приветствую, есть три таблицы:
works_prices (id, user_id, work_name_id, price) - связь с "works_names"
works_names (id, work_cat_id, name) - связь с "works_cat"
works_cat (id, name)

Хочу вывести форму-таблицу:
- категория работ
-- наименование работ - [цена]
-- наименование работ - [цена]
...
- категория работ
-- наименование работ - [цена]
...
Сделать связи и жадную загрузку это понятно, как лучше сгруппировать?
Для начала делал так:
$works = WorksPrices::find()
            ->joinWith('workName.workCat')
            ->where(['user_id' => $id])
            ->all();

 foreach ($works as $i => $work) {
echo "<div class='col-md-10'>". $work->workName->name ."</div><div class='col-md-2'>";
echo form->field($work, '[' . $i . ']work_price')->textInput()->label(false) . "</div>";
}

Заранее благодарю!
  • Вопрос задан
  • 195 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
kimono
@kimono
Web developer
$workCats = WorkCat::find()->with(['workNames' => function(ActiveQuery $q){
  return $q->with(['workPrices']);
}])->all();


foreach ($workCats as $workCat){
  echo '<h2>'.$workCat->name.'</h2>';
  foreach ($workCat->workNames as $workName) {
    foreach ($workName->workPrices as $workPrice) {
      echo '<p>'.$workName->name.' ['.$workPrice->amount.']</p>';
    }
  }
}


PS: не увидел сразу, для формы можно:
echo form->field($model, '['.$workCat->id.']['.$workName->id.'][]')->textInput();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы