ОРМ - кто как его кушает.

cDLEON

Онанист РНРСlub
ОРМ - кто как его кушает.

1) Часто ли вы используете фичи ОРМ вроде
PHP:
$model = new Model();
$model->with('relation_name')->without('field_name')->join('hz query')->fetch();
Фичи здесь with, without, join и прочая лабуда.
Нужны ли они в объекте как публичные методы и на сколько это правильно?
2) а такие функции:
PHP:
$model=new Model();
$arr=$model->get_by_activity(true)->limit(20)->offset(100);
Здесь меня интересуют limit, offset - вопросы те же.
 

fixxxer

К.О.
Партнер клуба
Эммм, мы о ОРМ или о моделях конкретных сущностей?

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

cDLEON

Онанист РНРСlub
когда суть самой модели это поиск по произвольному набору полей
По-подробнее можно ? :)) Пример какой-нить, желательно)
Эммм, мы о ОРМ или о моделях конкретных сущностей?
Я хочу поговорить о юзабилити АПИ оной. Т.е. есть готовая ОРМ будь то доктрина или кохана без разницы. Эти публичные методы вообще нужны для уважающей себя ОРМ?
Просто мне в такой реализации не нравится то, что теряется некая часть реалтайма. Модель мы уже создали в виде объекта, а до fetch() в ней нет данных. Т.е. запрошенная модель может по-просту не существовать в БД.
Даже если добавить магии и автоматический fetch() по __get($var), то гет может произойти уже где-нибудь в шаблоне.
 

AmdY

Пью пиво
Команда форума
cDLEON
>>Эти публичные методы вообще нужны для уважающей себя ОРМ?
да. в том числе и в доктрине.
а то что ты показал - это query builder, а не orm и он тем более должен быть в модели.
 

korchasa

LIMB infected
1,2. Да, ибо иногда нужно
Ленивая инициализация это удобно.
 

HraKK

Мудак
Команда форума
cDLEON
Тем что можно держать избыточные связи не тратя времени и памяти на ненужную загрузку. + не надо парится, когда надо что-то подгружать а когда нет.
 

cDLEON

Онанист РНРСlub
HraKK
Я не имею ввиду Lazy load связей или каких-то полей.
Я имею ввиду Lazy load модели тут:
PHP:
$model = new Model();
$model->with('relation_name')->without('field_name')->join('hz query')->fetch();
Если не сделать fetch, или там ->exists(), то мы не будем знать существует, допустим, юзер или нет - это может породить ошибку - когда программист забудет сделать это....
 

korchasa

LIMB infected
cDLEON
В теории да, на практике не припомню такого. Коллекции перебираются в цикле, и для пустой коллекции просто не будет перебора. А единичные объекты грузяться обычно по id. И там у нас по умолчанию бросается исключение.
 

cDLEON

Онанист РНРСlub
korchasa
Т.е. при загрузке по ид у вас нельзя использовать with, without etc ?
 

A1x

Новичок
иногда очень удобно иметь "пустую" модель
например создаемм новую запись из данных формы (кохана 3)
PHP:
    public function action_addAlbum() {

        $album = Model::factory('photo/album');
        $errors = array();

        if ('POST' == $_SERVER['REQUEST_METHOD']) {
            if (!$album->values($_POST)->check()) {
                $errors = $album->validate()->errors('models/photo/album');
            } else {
                $album->user_id = $this->auth->getUser()->getId();
                $album->created_at = date('Y-m-d H:i:s');
                $album->save();
                $this->request->redirect('gallery/albumAdded');
            }
        }

        
        $content = View::factory('site/account/album/form')
                ->set('album', $album)
                ->set('errors', $errors);
        $this->template->set('content', $content);
    }
 
Сверху