Вопрос по ORM

Решил попробовать LSный ORM, возник вопрос сразу по получению сущности
Есть нарпример таблица news и поле в ней news_id
Как вызвать выборку сущности по id? Т.е.

LS::E()->News_GetNewsByNews_Id(1);

Не работает, в силу того, что в __call() делается explode по "_" а механизма маппинга полей в базе я не нашел.
Или ORM диктует систему наименования полей в базе и просто интегрировать не получится?
  • avatar
  • 3
  • 0
    • 0
    • 0
    • 3

11 комментариев

avatar
LS::E() писать не обязатльно, можно просто $this.

$this->News_GetNewsByNewsId(1);
avatar
Это в принципе просто Алиас, как я понял, проблема не в этом, а в том, что поле в БД называется news_id
И писать мне надо $this->News_GetNewsByNews_id(1);'
Но тогда обработчик __call() неверно распознает вызов
avatar
Я второй день с ORM работаю :)
У всех полей должен быть префикс — имя сущности. Например: entity_id, entity_name. И вызываются они все так: GetEntityById(), GetEntityByName().
Проверь еще в ините модуля — parent::init();
avatar
Угу, собственно я и спрашивал
Или ORM диктует систему наименования полей в базе и просто интегрировать не получится?

Весьма неудобно, кстати, я почитал код мельком, посмотрел запросы которые он генерирует и как я понял префикс может быть либо именем сущности, либо отсутствовать, кастомный задать не получится, если по нему получать сущность вышеописанным способом, только через relations etc.
avatar
если кастомный, то его всегда придется прописывать явно, например, $this->News_GetNewsByPrefixId(1);
avatar
Вот что, подчеркивание можно тупо пропустить я и не подумал.
Почитать еще надо обертки __call() как-то они сильно потолстели с появлением ОРМ, или мне кажется )
А я тут уже нашел функцию MapperORM::GetByFilter() и через нее запилил =)

Спасибо за помощь, друзья!
avatar
К примеру поле из профиля пользователя «Город» (скины не описываю, только код):
файл classes/actions/ActionSettings.class.php
/**
			 * Проверяем город
			 */
			if (func_check(getRequest('profile_city'),'text',1,30)) {
				$this->oUserCurrent->setProfileCity(getRequest('profile_city'));
			} else {
				$this->oUserCurrent->setProfileCity(null);
			}


setProfileCity — это типичный сеттер для этого же поля есть и геттер)
Описывается (т.к. $this->oUserCurrent=$this->User_GetUserCurrent(); вызов уходит в модуль User ) он в этом файле classes/modules/user/entity/User.entity.class.php
Вот так:
public function setProfileCity($data) {
    	$this->_aData['user_profile_city']=$data;
    }

user_profile_city — это и есть поле в таблице

Работа с базой на уровне SQL запросов вынесена в маппер classes/modules/user/mapper/User.mapper.class.php
Работа с полями профиля в методах Add и Update

Чуть сумбурно описал, но суть я думаю ясна.
  • xRay
  • 0
avatar
Вопрос не про это был, но это у меня всегда были проблемы с четкой формулировкой своих мыслей =)
С сабжем уже разобрались, спасибо Орт'у и всем за отклк
avatar
Тут про ORM говорят :)
avatar
Угу. Сюда загляните classes\modules\user\entity\City.entity.class.php вот вам entity_id, entity_name. :)
avatar
Может я жутко туплю, но ничего тут по теме не вижу. Это обычное описывание сущностей.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.