Предположим, я хочу предоставить CActiveDataProvider для CGridView. Мне нужно поставить SUM(invitesCount) AS invites
в список поставщиков. Как получить его? Думаю, я не могу просто использовать $dataProvider->invites
?Yii - использование выражения MySQL AS.
ответ
Вы должны указать следующее в ваших relationinvites
'invites '=>array(self::BELONGS_TO, 'CampaignFund', 'campaign_id', 'select' => 'SUM(invitesCount)'),
и использовать это соотношение в ваших критериях.
Несколько других вариантов:
Использование CStatRelation
invitesCount=>array(self::STAT,'Invites','foreign_key_field');
Добавление публичной собственности может работать. Однако поле будет установлено, только если вы изменили запрос поиска по умолчанию, чтобы включить это новое условие. Это можно сделать, переопределив
defaultScope()
или создав новыйscope
и используя его, когда требуетсяinvitesCount
.Другой вариант - создать представление базы данных из требуемого запроса и создать новую модель из этого представления базы данных.
На самом деле вам не нужно определять новую «область». Вы можете просто изменить метод 'search', чтобы принять объект' CDbCriteria' в качестве параметра со значением по умолчанию «null», а затем объединить критерии по умолчанию с критериями из параметра. – Joe
спасибо. Является ли хорошей идеей добавлять ресурсы каждый раз, когда нам нужно какое-то поле? Это эффективно? Я заметил секунды перед тем, как прочитать ваш ответ. Я могу просто определить новые общедоступные свойства и сделать выбор с помощью 'AS' для этих свойств. Не уверен, какой путь лучше? – Joe