在用 PHP 编程时,我总是尝试创建与数据库中的表相对应的有意义的“模型”(类)。我经常遇到以下问题:
假设我创建了一个包含两个表的数据库:authors
和 blogs
,它们在我的应用程序中都有相应的模型。
假设我想打印所有博客以及有关作者的信息,我必须这样做:
<?php
foreach ($app->getBlogs() as $blog) {
echo "<h1>" . $blog->title . "</h1>";
echo "Written by" . $blog->getAuthor()->name . "</p>";
// ... et cetera
}
?>
问题是应用程序现在将触发 1 个 SQL 查询来获取所有博客项目,并触发 [number of blog items] 查询来获取每个作者的信息。使用简单的 SQL 我可以使用简单的查询检索此信息:
SELECT * FROM blogs
JOIN authors ON authors.id = blogs.author
处理此类问题的最佳方法是什么:开发面向对象的应用程序而不执行太多无用的 SQL 查询。
最佳答案
IMO,我认为你应该只编写另一个类来封装你所拥有的。博客有作者总是有意义的吗?每个作者都有博客吗?一个作者可以有多个博客吗?想想这些问题,然后设计一个类来封装这些。请记住,典型的数据库模式不是面向对象的......它们是关系的。是的,它们很接近,但有细微的差别。
因此,如果一个作者可以拥有多个博客,则您可以拥有某种多值类的键(使用基于作者 ID 的键),并且您可以通过一次 SQL 调用来初始化或加载此类。只是一些需要考虑的事情。
关于php - 干净的 OO 结构与 SQL 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165229/