Как вывести данные через foreach без дублей
У меня есть 6 таблиц
- клиенты
- платформы
- проекты
- связка между клиентом и проектом
- связка между клиентом и платформы
- связка между проектом и платформой
Мне нужно вывести в виде такого дерева
Клиент->Платформа(к которой относится проект)->Проект
Делаю 2 foreach - всё ОК Но на 3 foreach дублирую платформы
префикс node_ - это таблица со связкой в БД, там лежат 3 id (пример: дефолт, id_projet и id_platform)
Код
<div class="tab-pane p-3" id="in-work" role="tabpanel">
<div class="accordion" id="accordionExample">
<? foreach ($klients_in_work_db as $klients_in_work) { ?>
<div class="card border mb-0 shadow-none box_users_klient_in_work">
<div class="card-header p-0" id="heading_<?=$klients_in_work->id ?>">
<button class="btn btn-link text-dark" type="button" data-toggle="collapse" data-target="#collapse_<?=$klients_in_work->id ?>" aria-expanded="true" aria-controls="collapse_<?=$klients_in_work->id ?>">
<h5 class="my-1">
<?php if ($klients_in_work->avatar) { ?>
<img src="<?=$klients_in_work->avatar ?>" alt="avatar" class="thumb-xl rounded-circle">
<?php } else { ?>
<img src="/web/images/users/user-1.jpg" alt="Нет изображения" class="thumb-xl rounded-circle">
<? } ?>
<b><?=$klients_in_work->name ?></b>
<div class="group"><?=$klients_in_work->name_company ?></div>
<?php
// Всего проектов у клиента
$project_in_work = NodeProjectKlient::find()
->where(['id_klient' => $klients_in_work->id])
->count();
?>
<p class="group">проектов в работе: <?=$project_in_work ?></p>
</h5>
</button>
</div>
<div id="collapse_<?=$klients_in_work->id ?>" class="collapse " aria-labelledby="heading_<?=$klients_in_work->id ?>" data-parent="#accordionExample">
<div class="card-body">
<?php
//foreach ($users_klient_db as $users_klient)
//{
$project_db = ProjectForm::find()
->leftJoin('node_project_klient', '`node_project_klient`.`id_project` = `projects`.`id`')
->where(['node_project_klient.id_klient' => $klients_in_work->id])
->all();
// echo '<pre>';
// var_dump($project_db);
// echo '<pre>';
echo '<ul>';
//echo '<li>';
//echo $users_klient->username;
foreach ($project_db as $project)
{
$platforms_db = PlatformForm::find()
->leftJoin('node_project_platform', '`node_project_platform`.`id_platform` = `platforms`.`id`')
->where(['node_project_platform.id_project' => $project->id])
->all();
//echo '<ol>';
//echo $platforms->title;
foreach ($platforms_db as $platforms) { ?>
<li class="widget_li"> <img src="https://files.constantcontact.com/65cf42e1301/0654f56b-8387-4734-be7d-e8bcc52a97d2.png" alt="Нет изображения" class="thumb-small rounded-circle">
<?=$platforms->title ?>
<ol>
<a href="?project=<?=$project->id ?>"> <?=$project->title?></a>
</ol>
</li>
<? } ?>
<? }
//echo '</li>';
echo '</ul>';
//}
?>
</div>
</div>
</div> <!-- end card -->
<? } ?>
</div> <!-- end accordion -->
</div>
Как мне избежать дублей и сделать всё корректно?