【问题标题】:Symfony Imageboard post database schemaSymfony Imageboard 发布数据库架构
【发布时间】:2020-08-17 13:31:51
【问题描述】:

我正在 symfony 中制作图像板。如果我以最好的方式做到这一点,我就是古玩。

和普通论坛一样有话题和帖子。

  • 线程 1

    • 发布 1
    • 发布 3
  • 线程 2

    • 发布 2
    • 发布 4

问题是我创建了两个实体 ThreadPost。从一个线程获取所有帖子很容易,但存在一些问题

  • 我无法同时为线程和帖子创建>>id 链接。该线程具有来自该帖子的另一个 id 编号。我可以创建另一个链接系统,例如 >>t>id,但我认为两者的相同 id 编号对用户来说更好。
  • 双重 SQL 表架构 - 每个 postthread 都有标题、内容、日期、图像等。
  • 前端的 js 函数需要另一个参数来知道它是 post 还是 thread

而且我认为会有更多的问题。也许我应该只使用 post 而没有 thread 因为除了 thread_id 之外它是相同的。

Symfony 不允许在一张表中建立关系。我可以把它写成一个数字,但学说会做多个查询,这要糟糕得多。

我该怎么办?

【问题讨论】:

  • 您的问题是基于意见的。这里不会正确回答。您可以发布有关您已经编写的代码的问题,如果您有任何问题,请获得一些建议。对于第一点,更新您的帖子以询问您对代码的需求。请参阅 [stackoverflow.com/conduct] 了解更多信息。

标签: php mysql database symfony


【解决方案1】:

我找到了答案:https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/association-mapping.html#many-to-many-self-referencing

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @OneToMany(targetEntity="Post", mappedBy="parent")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity=Post::class, inversedBy="children", fetch="EAGER")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
    private $parent;

    /**
     * @ORM\OneToMany(targetEntity=Post::class, mappedBy="parent", fetch="LAZY")
     */
    private $children;

【讨论】:

  • 我有一个问题,它为线程加载 n+1 个查询,为一个线程加载 2 个查询。我能做什么?
猜你喜欢
  • 1970-01-01
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多