RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 562896
Accepted
Drakulitka
Drakulitka
Asked:2020-09-05 15:57:22 +0000 UTC2020-09-05 15:57:22 +0000 UTC 2020-09-05 15:57:22 +0000 UTC

如何正确显示类别树(递归?)

  • 772

一天中的好时光。

请告诉我如何在模板中显示对象数组中按级别分类的树(学说)

实体字段:http ://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-self-referencing

/**
 * @var \Doctrine\Common\Collections\Collection
 *
 * @ORM\OneToMany(targetEntity="Application\Entity\Category", mappedBy="parent", cascade={"remove"})
 */
private $children;

/**
 * @var \Application\Entity\Category
 *
 * @ORM\ManyToOne(targetEntity="Application\Entity\Category", inversedBy="children")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="parent", referencedColumnName="id", nullable=true)
 * })
 */
private $parent;

表中的一切都很好:

id  parent      name
 1   null     Категория 1
 2   null     Категория 2
 3   1        ПодКатегория 3 к 1
 4   2        ПодКатегория 4 к 2

如果要对每条记录中的 foreach'em 进行排序 $category->getParent == null。(可能是因为这不仅仅是一个字段,而是指向另一条记录的链接)如果以数组的形式进行选择,那么 Parent 字段将完全不存在。

Zend Framework 3 教义 2 PosrgreSQL

php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Drakulitka
    2020-09-05T22:08:05Z2020-09-05T22:08:05Z

    我突然意识到 Parent 字段不仅仅是父类别的 id,通过虚拟字段 Сchildren 你可以获得子类别作为回报。这是一个巨大的优势,因为这里甚至不需要递归。

    这是解决方案:

    <?php foreach($categories as $category): ?>
        <?php if ($category->getParent() === null) : ?>
            <li><?= $category->getName() ?></li>
            <?php foreach($category->getChildren() as $children) {?>
                <li><?= $children->getName() ?></li>
            <?php }?>
        <?php endif; ?>
    <?php endforeach; ?>
    

    只有数据库中的查询数量在增加((

    • 2
  2. Best Answer
    Drakulitka
    2020-10-08T04:42:42Z2020-10-08T04:42:42Z

    在此解决方案中,只有 1 个查询到数据库

    $categoryTree = [];
    foreach ($categories as $category) {
        $parentId = $category->getParent() ? (int)$category->getParent()->getId() : null;
        $categoryTree[$parentId][] = $category;
    }
    
    foreach ($categoryTree[null] as $root) {
        $root->getName();
        if (isset($categoryTree[$root->getId()])) {
            foreach ($categoryTree[$root->getId()] as $child) {
                $child->getName();
            }
        }
    }
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5