Я действительно понятия не имею, что озаглавить, так что кто-то ПОЖАЛУЙСТА, не стесняйтесь редактировать, как только вы получите мой дрейф ...
Для моего примера у нас есть user
и book
классы.
Каждый пользователь - одна строка в нашей таблице user_data
, каждая книга - одна строка в нашей таблице book_data
, и коллекцию каждого пользователя можно запросить из таблицы user_book_collection
один-ко-многим.
Когда я загружаю объект пользователя, я уверен Я хочу получить все основные данные (имя, возраст, местоположение), но я могу или не хочу знать коллекцию книг пользователя. Я , вероятно, не хочу знать все основные данные для каждой книги в этой коллекции, но иногда я мог бы.
Но я хочу, чтобы все это было доступно в случае необходимости ...
RELATIONSHIP MAP
User
|-- name
|-- age
|-- location
|-- book collection (ARRAY)
|-- Great Gatsby
|-- Grapes of Wrath
|-- Catch-22
|-- Huckleberry Finn
|-- author
|-- edition
|-- publisher
|-- price
Мой текущий подход заключается в загрузке первого «уровня» данных через конструктор пользователя. И потом, если мне нужно что-то узнать его коллекцию, у меня есть пара методов, подобная этой:
public function getBookCollection() {
if (empty($this->_Books)) {
self::loadBookCollection();
}
return $this->_Books;
}
private function loadBookCollection() {
// query dbase with user's ID
// load results into $this->_Books array
}
Проверка empty()
состоит в том, чтобы избежать повторных обращений в базу данных для получения данных для массива $_Books
различными методами в классе.
Я подумал, что это лучше, чем загружать все массивное дерево данных всякий раз, когда я хочу просто инициализировать пользовательский объект ...
Это простой пример, но я думаю, что он достаточно ясен.
Мои вопросы:
1) это нормальный способ обработки таких вещей? Я могу представить себе ситуации, когда такого рода перекрытия данных могут просто продолжаться и продолжаться и продолжаться ...
2) есть ли лучший способ?
Спасибо, а кто-нибудь, пожалуйста, возьмите трещину в моем названии!