Вы используете ORM в реальной практике?

pilot911

Новичок
Автор оригинала: A1x
флоппик
ну так и тут данные из бд проецируются на объект предметной области. то о чем вы говорите похоже на Data Mapper, а в kohana ORM сделан на Active Record

Можно спрятать конструкции query builder'a в модель отдельным методом, как-то так
$tt = Model::factory('test')->joinTestComment()->find_all();

вообще можно пытаться как можно больше абстрагироваться от SQL, но так ли уж это надо?
абстрагирование - это и есть ОРМ, а не подделки, когда ты извлекаешь, например, Пользователя и вместе с ним автоматически подгружаются связанные сущности, причем описание связей делается не руками в виде обертки над SQL, а в виде, например, xml нотаций
 

A1x

Новичок
pilot911
в абстрагировании тоже иногда важно вовремя остановиться ;)

когда ты извлекаешь, например, Пользователя и вместе с ним автоматически подгружаются связанные сущности
не собираюсь идеализировать kohana ORM, но он все это делает, связанные сущности могут подгружаться как сразу так и on demand (lazy load)

то что при этом можно обходиться без xml нотаций не вижу большим недостатком
 

newARTix

Новичок
хорошо бы кроме споров о сущности ORM приводить еще и ее преимущества :) Особенно в плане работы с реляционными БД.

-~{}~ 24.09.10 21:15:

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

Духовность™

Продвинутый новичок
Работаю тут с ORM Doctrine. Что бы понять CRUD операции системы, в которую входит эта ORM, мне понадобилось несколько дней. НЕВЕРОЯТНАЯ сложность и геморрой, долгое вникание в суть сиcтемы, куча дополнительных слоёв, нюансов и т.д. ТАК нельзя писать программы, когда для того, что бы мне обновить одну строку таблицы БД нужно извратиться через три погибели.
 

Adelf

Administrator
Команда форума
triumvirat, используя сгенеренные модели:

$user = new User($id);
$user->name = $newName;
$user->save();

Это три погибели?

-~{}~ 25.10.10 14:04:

З.Ы. 1-2 часа на "почитать доку" и спокойно по ней работа пошла. Никаких "несколько дней"
 

Духовность™

Продвинутый новичок
Это три погибели?
конкретно ЭТО - не три погибели. Конкретно этот API-код я реализовал в своей недоORM без использования вашей монстровидной доктрины, чему безмерно рад. Так что пример не в тему.

То, с чем я работаю - это три погибели. Может быть я тупой, а может и разработчик кода слишком все усложнил, но что бы мне сделать какие-то тривиальные операции я должен читать совершенно неясную документацию, ибо всё совершенно не прозрачно. И это на каких-то тривиальных запросах. На этих тривиальных запросах я зову автора кода и мы вместе решаем, как правильно поступить, что бы обновить одну строку таблицы данных. Это идиотизм.

Программы надо писать так, что бы их было возможно легко поддерживать и масштабировать. ООП это хорошо, но когда в угоду ООП жертвуют здравым смыслом - это плохо.

И когда любители писать "грамотно", "расширяемо" пишут так, что хочется все стереть и написать нативный SQL, то это о многом говорит.

Извините, накипело.
 

Raziel[SD]

untitled00
Автор оригинала: Adelf
triumvirat, используя сгенеренные модели:

$user = new User($id);
$user->name = $newName;
$user->save();

Это три погибели?

-~{}~ 25.10.10 14:04:

З.Ы. 1-2 часа на "почитать доку" и спокойно по ней работа пошла. Никаких "несколько дней"
Обновить некоторое поле у "объектов" по условию ? например есть записи, которые добавлены более года назад, нужно у них изменить флаг "видимость" с "1" на "0", как это сделать в ORM, например доктрине ?
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Пример из kohana3:

$user = ORM::factory('user');
$user->name = 'Bob';

// Change all active records to name 'Bob'

$user->where('active', '=', TRUE)->save_all();
 

AmdY

Пью пиво
Команда форума
Вроде так было
PHP:
Doctrine_Query::create()
    ->update('Article')
    ->set('active', 0)
    ->where('created_at < ?', strtotime('-1 year'))
    ->execute();
но смысл не здесь, смыл найдёшь, когда будешь удалять эти записи и у тебя почистятся все комменты и теги, а так же если висит preDelete - удаление фоток и т.д. А можно сделать softdelete с помощью плагина, и в твои выборки не будут попадать записи с deleted = 1. Едиственный жирный минус - производительность в некоторых операциях.
 

varan

Б̈́̈̽ͮͣ̈Л̩̲̮̻̤̹͓ДͦЖ̯̙̭̥̑͆А͇̠̱͓͇̾ͨД͙͈̰̳͈͛ͅ
Кстати, кто-нибудь знает как в kohana 3 создать сразу несколько записей, оптом?
аналог insert .... (f1, f2, f3) values ('f1', 'f2', 'f3'), ('f1', 'f2', 'f3'), ...
 

fixxxer

К.О.
Партнер клуба
А я недавно на такое наткнулся - http://www.phpactiverecord.org/

Любителям рельсовского ActiveRecord должно понравиться.
 
Сверху