При программировании на 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-запрос, чтобы получить все элементы блога, а также [количество запросов блога], чтобы получить информацию для каждого автора. Используя простой SQL, я мог бы получить эту информацию с помощью простого запроса:
SELECT * FROM blogs
JOIN authors ON authors.id = blogs.author
Каков наилучший способ решения таких проблем: разработка объектно-ориентированного приложения без выполнения слишком многих бесполезных SQL-запросов.