Объединенные данные из двух доменных моделей - PullRequest
0 голосов
/ 31 января 2010

Я пытаюсь реализовать Шаблон шлюза данных / домена . Я понимаю основы и фантастический способ отделить доменную логику от постоянного уровня данных. Теперь у меня есть следующее требование:

Допустим, у меня есть две доменные модели: пользователь (ы) и компания (и). Когда я хочу получить список пользователей со всеми пользователями, я бы сделал что-то вроде этого:

$userGateway = new Model_UserGateway();

$users = $userGateway->fetchAll();

foreach ($users as $user) {...}

это работает очень хорошо, но теперь сложная часть: я хочу теперь иметь список со всеми пользователями и их соответствующей компанией. Я мог бы пройтись по пользователям и экземплярам для каждого пользователя связанной компании, но это ... не мое любимое решение. В худшем случае я создаю вложенные запросы к базе данных. Другой подход заключается в том, что я получаю дополнительные пользовательские данные через шлюз и разбираюсь с ними ... я не знаю: (

Какая лучшая практика для получения списка пользователей с информацией о компании?

спасибо заранее

Майкл М

1 Ответ

0 голосов
/ 31 января 2010

Реализуйте метод, подобный fetchAllWithCompany в вашем Model_UserGateway. В этом методе вы выполняете запрос к базе данных, который выбирает информацию из обеих таблиц. Э.Г.

SELECT * 
FROM user 
LEFT JOIN company ON user.id = company.user_id

и тогда вы получите всю необходимую информацию:

$users = $userGateway->fetachAllWithCompany();

Я бы так и сделал. Как вы сказали, создавать запрос для каждого пользователя, чтобы получить его компания не хорошо.

Edit:

Предполагая, что у вашего User объекта есть метод getCompany, вы можете сделать:

foreach($users as $user) {
    $company = $user->getCompany()
}

Конечно, getCompany должен возвращать Company объект.

Вы хотите реализовать это для изучения? Потому что многие фреймворки поддерживают такую ​​абстракцию базы данных, например, Zend Framework .

...