Yii 1.1 и CStatRelation

Уже исправленные репорты или принятые предложения
Ответить
Restlin
Сообщения: 139
Зарегистрирован: 2011.09.09, 18:12

Yii 1.1 и CStatRelation

Сообщение Restlin »

При работе системы необходимо выполнять запросы вида:

Код: Выделить всё

SELECT doc_id as id, count(*) AS amount, max(date_in) max_date_in
from doc_execution 
group by doc_id;
Результаты подобного запроса необходимо обрабатывать в модели, поэтому очень удобно реализовать его через CStatRelation.
К сожалению на текущий момент параметр select у CStatRelation не позволяет получить несколько параметров из такого вида отношений.
Возможна ли доработка CStatRelation в данном ключе? Либо посоветуйте пожалуйста как обойти данную ситуацию?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii 1.1 и CStatRelation

Сообщение samdark »

Это никаким боком не похоже на stat. Stat предназначен исключительно для агрегирующих запросов.
Restlin
Сообщения: 139
Зарегистрирован: 2011.09.09, 18:12

Re: Yii 1.1 и CStatRelation

Сообщение Restlin »

Более подробно опишу ситуацию.
Есть модель Document на основе таблицы document и есть другая таблица doc_execution. Таблицы связаны по отношению document.id = doc_execution.doc_id (один ко многим). При выводе списка моделей Document в gridView необходимо показать общее количество исполнений документа и последнее время ввода исполнений.
На sql я бы написал так:

Код: Выделить всё

SELECT t.*,t1.amount,t1.date_in FROM
document t
left join 
( select doc_id, count(*) AS amount, max(date_in) AS date_in
from doc_execution
group by doc_id) t1 on t1.doc_id = t.id
Разве stat не предназначен для получения подобной информации из связанных таблиц?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Yii 1.1 и CStatRelation

Сообщение samdark »

Вообще такой запрос у вас базе сделает очень плохо. Лучше всего завести счётчик в табличке document и инкрементировать его вовремя.
Ответить