29
Июн
2022

Как вывести данные через 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>

Как мне избежать дублей и сделать всё корректно?

Источник: https://ru.stackoverflow.com/questions/1425171/%D0%9A%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-foreach-%D0%B1%D0%B5%D0%B7-%D0%B4%D1%83%D0%B1%D0%BB%D0%B5%D0%B9

Тебе может это понравится...

Добавить комментарий