посоветуйте решение (ООП)

Духовность™

Продвинутый новичок
посоветуйте решение (ООП)

Есть класс User
Есть класс User_Mapper

В классе User жестко заданы атрибуты модели User, они же являются именами полей таблицы user в БД:

PHP:
class User
{
    $attr = array('id', 'user_name', 'town_id', 'country_id');
}
Что бы получить список объектов User, нужно вызвать определенный метод User_Mapper:

PHP:
$users_list = User_Mapper->getObjectList();
Каждый пользователь привязан к городам и странам, в полях town_id и country_id хранятся ID этих городов и стран. Есть соответственно таблицы стран и городов.

Нужно вывести список пользователей, с указанием страны и города. Так:

петя россия москва
ваня россия питер

Вот тут я не знаю как правильно с точки зрения ООП сделать. Какой слой должен отвечать за сцепление данных модели User и данных таблиц towns и countries?

Всё это хочется сделать одним запросом (не вытаскивая по отдельности данные User и данные территорий), но в таком случае "чистые" данные объекта User будут мешаться с т.н. справочниками, коими являются таблицы towns и countries.

:confused:
 

AmdY

Пью пиво
Команда форума
у тебя теперь несколько путей:
писать свой уже полноценный ORM
воспользоваться Doctine
не париться, дабавить костыль в виде метода query который делает обычный запрос и возвращает данные.
 

Alexandre

PHPПенсионер
PHP:
$user->belong_to('Country');
$user->belong_to('Town');
$user_list = User_Mapper->get_list( $user) // User_Mapper анализируя объект $user сам построит необходимый запрос
 

atv

Новичок
ой я там ногу сломаю...
Я хоть и не любитель Doctrine, но начать работать с ним значительно проще, чем с тем же Popel, тем более к Doctrine есть обилие документации.
 

AmdY

Пью пиво
Команда форума
чесно говоря, документация лажа у доктрины, я больше узнаю из тикетов и собственного опыта, а дока показывает только возможности которые были ещё до релиза
 

Alexandre

PHPПенсионер
не понялЪ
$user->belong_to('Country');
$user->belong_to('Town');
$user_list = User_Mapper->get_list( $user) // User_Mapper анализируя объект $user сам построит необходимый запрос
что тут не понятного?
Таблица Юзеров прилинковывается к таблице городов и стран и выбирается весь список ...
вот вопрос реализации как это сделать - это уже пол сотни строк кода...
как уже говорили ORM

-~{}~ 15.12.08 11:42:

atv
а может посоветовать ему LightOrm - Small, Fast and Powerful ORM library?
 

Духовность™

Продвинутый новичок
блин вот же реально проблема.. опять говнокод получается. Alexandre попробую по твоему совету сделать. Только вот именно к доменному объекту надо прилинковывать таблицы или лучше может к mapper-y... хз. говнокод forever!
 

atv

Новичок
а может посоветовать ему LightOrm
К сожалению, LigthOrm не может похвастаться хорошей документацией, и без доли энтузиазма при использовании LightOrm не обойтись. Единственное, что могу обещать, это онлайн поддержку автора LightOrm, т.е. меня :)

Так что, triumvirat, если готов на некоторые жертвы, то попробуй LightOrm.
 

Alexandre

PHPПенсионер
triumvirat мой совет тоже не супер гууд,
сам использую чужой фреймворк, где классы маппируются из БД (проект разовый, расширение функционала).
там есть положительные и отрицательные стороны, но идея ORM не плохо реализованна (пример взят от туда).
к сожалению, большинство решений в жизни требует нетривиальных запросов, по этому само использование ORM лично у меня - сводится к минимуму. Больше времени тратится не на реализацию функционала, а на его подгонку в рамках ORM. Но, как сказал Hrak - у каждого фреймворка - есть свой к-энт вхождения. Сроки заставляют делать по своему... и получается - говнокод...
сорри за оффтоп, нагорело.

возвращаясь к теме - красиво будет получаться со временем...
сам потом поймешь., как лучше
постарайся думать: как сделать так, чтоб работало правильно.
а красиво получится само-собой.

-~{}~ 17.12.08 19:00:

К сожалению, LigthOrm не может похвастаться хорошей документацией, и без доли энтузиазма при использовании LightOrm не обойтись
первое что я сделал, после попытки изучения сырцов вышеупомянутого фреймворка - это прошелся пхпдоком. Там даже комментов в стиле пхпдок - нет. В общем - изучать фреймворк без док - сущий ад!

Хорошая наглядная документация - это залог успешного внедрения и использования сторонними потребителями, особенно актуально для ОпенСоурс.
 

djubas

Новичок
еще по идее с точки зрения БД у тебя в таблице лишняя информация на счет страны. код страны можно получить через код города
 

atv

Новичок
первое что я сделал, после попытки изучения сырцов вышеупомянутого фреймворка - это прошелся пхпдоком. Там даже комментов в стиле пхпдок - нет.
Уточни пожалуйста, какой фреймворк ты имеешь ввиду? В LightOrm все методы документированы. Нет только общей документации. К тому же есть тесты, которые покрывают каждый аспект использования .
 
Сверху