Допустим, у меня есть две таблицы: Book
и Category
.Book
имеет внешний ключ для Category
.Книга может иметь только на категории.Допустим, я хочу отобразить эту таблицу:
Book Title | Category ID | Category Name
-------------------------------------------------------------------------
Lord of the Rings | 1 | Fiction
Ender's Game | 2 | Science Fiction
Purpose Driven Life | 3 | Religious
С моделью предметной области и картографом данных (определение Фаулера) у нас есть Book
и Category
объекты, каждый из которых имеет свои собственные сопоставители.Проблема здесь в том, что, поскольку оба являются отдельными объектами, я в конечном итоге запускаю множество запросов для отображения простой таблицы:
$booksArray = $bookMapper->getTopTenBooks();
$viewData = array();
foreach ($booksArray as $book)
{
$categoryID = $book->getCategoryID();
$category = $categoryMapper->getByID($categoryID);
$viewData[] = array(
'book' => $book,
'category' => $category
);
}
return $view->load($viewData);
Это один запрос, чтобы получить список книг для отображения вместе со многими запросами.чтобы получить объекты соответствующей категории, относящиеся к каждой книге.
Дело в том, что с помощью SQL я могу разделять данные любым способом, каким захочу.На самом деле я могу получить все необходимые данные одним запросом:
SELECT
book.name, category.name
FROM
book LEFT JOIN category ON (book.cat_id = category.id)
Можно ли использовать этот SQL, сохраняя при этом разделение между представлением, источником данных и уровнем логики домена?Если я могу, как?Как мы можем эффективно разделить данные, которые мы хотели отобразить?