1

Тема: запрос на Propel ORM [нерешено]

Доброго времени суток!
Есть вот такой запрос (он работает):
select count(database.`order`.profile_id) as c, database.`order`.profile_id, sum(database.`order`.total) as op
        from database.`order`
        group by database.`order`.profile_id
        order by op desc

Как написать его используя Criteria?
Спасибо!

2

Re: запрос на Propel ORM [нерешено]

и какой объект в результате ты хочешь получить? У тебя же здесь просто будет список количеств и сумм…
делай запрос без Criteria, на sql'е

3

Re: запрос на Propel ORM [нерешено]

Писать на sql используя orm...не очень както.:) Нужно Criteria для использование sfPropelPager.
Например, есть табл. ордеров:
    id        profile_id            total
    1               2                   100   
    2               1                    50
    3               3                   250
    4               1                   100
    5               2                   500   


А запрос должен возвращать так:
profile_id        c             op
    1                2            150
    2                2            600
    3                1            250
c - колечество ордеров юзера, op - общая сумма ордеров.

Написать на sql и свой пейджер это уже крайний вариант.

4

Re: запрос на Propel ORM [нерешено]

fSym пишет:

Писать на sql используя orm...не очень както.:)

Вы не поверите, но таки вполне себе очень.
ОРМ - это не универсальный конструктор запросов, и вообще собственно не конструктор. Его задача - представить реляционную структуру БД как набор объектов со связями.

Заюзать пейджер конечно соблазнительно, да. Как правильно обмануть Пропел и написать критерию, должна помочь эта ссылка:
http://stackoverflow.com/questions/1868 … n-criteria
Если не разберетесь - тогда уже напишу ваш вариант.

5 Отредактировано fSym (2011-09-21 14:39:01)

Re: запрос на Propel ORM [нерешено]

Да, я делал подобним образом, вот как на http://stackoverflow.com/questions/1868 … n-criteria или на http://stereointeractive.com/blog/2007/ … n-objects/ но успеха пока не добился)) default/smile
Сделал следующим образом:
            $orders = OrderQuery::create()
                                ->withColumn('SUM(Order.OrderTotal)', 'orders_price')                                 
                                ->groupBy('Order.ProfileId')
                                ->withColumn('COUNT(Order.ProfileId)', 'orders_count')
                                ->withColumn('Order.ProfileId', 'profile_id')
Работает так как мне нужно. Доделываю пагинатор. После попробую еще преодолеть Criteria.
Если кому не трудно, от помощи не откажусь))