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

itprog

Cruftsman
так посмотри на Doctrine 2, там все сделано офигенно классно. единственный минус - это релейшены сложно описывать, но в документации для каждой ситуации есть свой пример.
 

MildMildMint

Новичок
Doctrine, несколько реализаций AR.
Использовал более года. Вернулся назад к чистому SQL.

В ORM удобно делать так:
if (smth) $select->where(another condition);
чем вклеивать строку AND another condition в SQL.

В остальном я плюсов не особо заметил.
 

AmdY

Пью пиво
Команда форума
MildMildMint
+1, я так сейчас и делаю, билдю только where, нуно только код подправить, чтобы работало
PHP:
$obj = new Model_News();
$obj->getWhere()->addAnd('category = ?', 1)->adnOr('category = ?', 2);
$obj->fetchAll($limit, $offset, 'title ASC'); // реально, здесь у меня пока первым параметром 
//идёт $where, но нужно брать из самого объекта
//тогда можно делать будет так
class Model_News extends Model {
    protected $tableName = 'news';
    public function __construct() {
        $this->where = new Db_Where('visible = 1');
    }
}
$obj = new Model_News();
$obj->getWhere()
    ->addAnd('category = ?', 1)
    ->adnOr('category = ?', 2)
    ->fetchAll($limit, $offset, 'title ASC');
// вёрнёт только видимые записи
$obj = new Model_News();
$obj->getWhereClear()
    ->addAnd('category = ?', 1)
    ->adnOr('category = ?', 2)
    ->fetchAll($limit, $offset, 'title ASC');
//вернёт всё
 

Adelf

Administrator
Команда форума
Эти споры никогда не утихнут :)
Сайтостроители будут говорить - ORM фигня - огромная, неудобная, тормозная.
Те, кто строют веб-системы со сложными бизнес-рулами, которые описываются на PHP(C#, Java - нужное подчеркнуть), а не в stored процедурах, не поймут как можно без ORM.

Мой опыт:
На простых веб-проектах я юзаю простенькую Кохана-ORM, иногда пишу запросы напрямую.
На проекте с логикой, описанной в PL/SQL процедурах, у меня простенькая самописная прослойка с удобняшками и ничего более.
Был на одном проекте C# с бизнес-рулами. Бизнес-логика была в отдельном слое, но заколебались мы там без ORM.
Сейчас начинаю проект с бизнес-рулами на PHP. Использую Doctrine и мало что заставит меня отказаться от нее.
 

DYPA

Настоящая dypa (c)
нет, костыль потому что... надстройка над надстройкой...
 

DYPA

Настоящая dypa (c)
Автор оригинала: korchasa
DYPA
Почему надстройка над настройкой это костыль?
пример:
есть SQL, есть орм Doctrine, есть костыль DQL (Doctrine Query Language)
о чём думал разработчик DQL - было бы круто писать меньше и проще изменять код и самое главное о чём думалось - повысить читаемость кода, а значит и его простоту, но вышло
PHP:
$q = Doctrine_Query::create()
    ->select('a.name')
    ->from('Account a')
    ->where('a.amount > 2000');

echo $q->getSqlQuery();
PHP:
$q = '
SELECT 
	a.id AS a__id, 
	a.name AS a__name 
FROM account a 
WHERE 
	a.amount > 2000
'
echo Db::Query($q);
 

cDLEON

Онанист РНРСlub
DYPA
С доктриной очень тесно не знаком, но мне, почему то, кажется, что DQL был разработан для возможности на ходу включать\выключать некоторые джойны, филды и проч внутри их ORM
 

AmdY

Пью пиво
Команда форума
DYPA
во-во, слушай cDLEON-а, добавь таблицу со связью *-*, а про pre и post методы позволяющие менять поведение, про плагины а-ля soft delete, про деревья говорить, наверное, вообще не будем
не занимайся ерундой, если ты не хочешь использовать возможности orm, а лишь использовать query builder - то нафиг он тебе не нужен.
 

cDLEON

Онанист РНРСlub
AmdY
Помоему кое-кто ники попутал :)))
Как с быстродействием в Доктрине2 ?
И ещё волнует вопрос - у них так и осталось до сих пор - на любой чих по объекту?
 

AmdY

Пью пиво
Команда форума
cDLEON
ну, добавил "-a", в смысле что ты правду глаголишь. Для быстродействия они так чё-то понамутили, наверное оптимизировали, но мне синтаксис теперь не нравится, да и забросил я Doctine год назад, сейчас как раз вытащил старый фреймворк и вспоминаю.
У меня на руках два фреймворка - один шустрый, второй на доктрине и плевать какая-там производительность, главное производительность разработки. хотя для простых сайтов на продакшине 0-2 запроса делаются мимо кэша, так что экономить практически нигде не приходится.
Кстати, лёгкий фреймворк как доглажу до идеалогической отчётливости, выложу, там есть простенькая реализация Table Data Getway для обычных выборок.
 

korchasa

LIMB infected
Автор оригинала: DYPA
пример:
есть SQL, есть орм Doctrine, есть костыль DQL (Doctrine Query Language)
о чём думал разработчик DQL - было бы круто писать меньше и проще изменять код и самое главное о чём думалось - повысить читаемость кода, а значит и его простоту, но вышло
Основное назначение DQL - независимость от конкретной СУБД. Есть небольшой профит от того, что форма объектная(простота группировки критерий, например), но это побочные плюсы.
 

pilot911

Новичок
ОРМ хорош отображением таблиц на объекты.. а вот если у меня объектная база поверх реляционной.. справочники всякие, сущности, которые между собой связываются.. как Доктрина с этим будет работать ? я же не буду для каждой сущности создавать свой конфиг... связи и сбор объекта со своими связанными объектами должен делаться на автомате.. реально ли это в Доктрине ?
 

pilot911

Новичок
почитал - не понял, можно своими словами сам принцип, очень нужно, потому как именно сейчас решаюсь переходить на Доктрину или нет
 

korchasa

LIMB infected
pilot911
Ты скажи что тебе от него нужно. Связь сущностей есть во всех полноценных rom'ах.
 

pilot911

Новичок
если упрощенно, у меня такая структура - таблица сущностей (новости, специальности, образовательные учреждения, врачи)

у врачей и юр лиц (тоже сущностей) есть связи с образованием, специальностью, адреами и прочим

все эти сущности созданы автоматически, то есть лежат, упрощенно говоря, в одной таблице, а значения их свойств - в другой таблице в виде IDObject Целое Дробное Строка Связь

так вот.. вопрос в том, как доктрине дать понять, что для врачей нужно извлечь связанные данные (в тч и связанные объекты), которые лежат в определенных полях таблицы значений (где хранятся целые, строки, дроби и ID связанных объектов)
 
Сверху