性能注意事项-带有外键的自定义帖子的后表和新表?

时间:2019-10-26 作者:Brian

我正在修改一个使用各种自定义帖子类型的插件。类型为

courses
   lessons
      topics
course, lesson, 或topic 级别也可以是quizzesassignments.

该插件还集成了bbpress 这样就可以forumsforum topics 与关联的course. 但仅限于课程层面。因此,我通过cool添加了relationship字段pods 插件,这样当我添加论坛主题时,我可以将其与课程和主题联系起来。但仍然存在检索问题。。。

我经常需要做一些动作,比如

全部检索quizzes 对于course (无论是否quiz 已附加到lessontopicquizzes 对于lesson (从lesson 和关联topics)forum topics 对于lesson (含义forum topicslesson topic.forum topics 对于course (含义forum topics 在整个过程中,这意味着lessonstopicscourse.总是为了提取所需的所有内容而嵌套循环,这真的很累人。

此外,wordpress插件使用wp_postmeta 这张桌子有点吓人。我不认为一组给定的数据必须与其他插件的数据捆绑在一起有什么意义。

这让我想我应该去掉所有存储在wp_postmeta 而是为course, lesson, topics, quizzes, assignments. 这样的测验,我可以设置course_id, lesson_id, topic_id 这样我就可以很容易地找回quizzes 绑定到course, lesson, 或topic. 同样适用于forum topics. 这意味着在quiz 桌子喜欢

id  quiz_id  post_id    id_type
1      2       5        course
2      2       12       topic
3      2       21       lesson
etc
但我不会有成千上万的测验!我想不出一种更干净的方法来提取我需要的数据。我真的厌倦了get_posts 具有args 这不允许我在单个查询中获得所需的内容。

很好奇其他人是怎么处理的。我来自laravel dev,我喜欢这样一个事实:我可以定义一个模型onetomanymanytoone 实体。这样我就能做到

$courses->topics
$courses->quizzes
$courses->forums
$courses->lessons->forums
$courses->topics->quizzes
这样工作真是太棒了。

最近,当我使用wordpress时,我得到的印象是,由于wp_postmeta 桌子

但也许我错过了什么。大概wp_postmeta 是一件美丽的事情,而我却看不到它的美丽。

那么,有人能提供一个好的方法来检索我正在寻找的数据吗?

谢谢

布莱恩

1 个回复
SO网友:John Andrew Sanchirico

我不能说这是最好的解决方案,但我知道像wp\\U Posteta这样的结构不会出错。

我对GravityForms做了一些自定义工作,现在它们使用了类似的结构。这里没有使用Posteta,而是有一个“entries”表。因此,对于每个表单提交,都有一个entry\\u id和多个不同的条目,这些条目由meta\\u键区分。知道他们切换到这样的结构可能表明这是查询的最佳解决方案。