Я использую ZF в течение нескольких месяцев, и я действительно доволен им, однако я не совсем уверен, как работать с отношениями моделей и в то же время избегать множественных запросов к БД. У многих людей есть эта проблема, и никто, кажется, не может найти хорошее решение для нее. (и избегая использования стороннего ORM) Например, у меня есть список пользователей, и каждый пользователь принадлежит к группе. Мне нужен список пользователей, отображающих информацию о пользователе и имя группы (для таблиц: пользователи и группы. У пользователей есть внешний ключ для групп таблиц).
Я имею:
2 класса отображения для обработки этих таблиц, UserMapper и GroupMapper.
2 модели классов пользователей и групп
2 класса источников данных, расширяющих Zend_DB_Table_Abstract
в маппере пользователя я могу сделать findParentRow, чтобы получить информацию о группе каждого пользователя, но проблема в том, что у меня есть дополнительный запрос для каждой строки, это не очень хорошо, я думаю, когда с объединением я могу сделать это только в один. Конечно, теперь мы должны отобразить этот результат на объект. так что в моем абстрактном классе Mapper я пытаюсь загрузить объединяющие таблицы для каждой родительской строки, используя псевдонимы столбцов (аналогично Yii, я думаю), поэтому я получаю в одном запросе объект-значение, подобный этому
// Объект пользовательской модели
$userMapper= new UserMapper();
$users= $userMapper->fetchAll(); //Array of user objects
echo $user->id;
echo $user->getGroup()->name // $user->getParentModel('group')->name // this info is already in the object so no extra query is required.
Я думаю, вы поняли мою точку зрения ... Есть ли нативное решение, возможно, более академическое, чем мое, чтобы сделать это, не избегая множественных запросов? // Zend db table выполняет дополнительные запросы для получения метаданных, которые в порядке и могут быть кэшированы. Моя проблема в том, чтобы получить информацию о родительской строке ... как в yii .... что-то подобное $ userModel-> with ('group') -> fetchAll ();
Спасибо.