Получается, что в цикле Вы обращаетесь к базе данных, это плохо.
public function getDamages()
{
return $this->hasMany(Damage::className(), ['id' => 'damage_id'])
->viaTable('car_has_damage',['component_id' => 'id']);
}
foreach (\app\models\base\Component::find()->with('damages')->all() as $component ) {
//Выводим компонент
echo Html::tag('div',$component->name);
//Выводим все повреждения связанные с этим компонентом
foreach ($component->damages as $damage) {
echo Html::tag('span',' ----- ' .$damage->name);
}
}
public function getDamages()
{
return $this->hasMany(Damage::className(), ['id' => 'damage_id'])
->viaTable('car_has_damage',['component_id' => 'id'],
function($query) { return $query->where(['car_id' => 1]); });
}
foreach (\app\models\base\Component::find()->with(['damages' => function($query) { return $query->andWhere(['car_id' => $car->id ]) ])->all() as $component ) {