2013-04-04 4 views
0

Предположим, я хочу предоставить CActiveDataProvider для CGridView. Мне нужно поставить SUM(invitesCount) AS invites в список поставщиков. Как получить его? Думаю, я не могу просто использовать $dataProvider->invites?Yii - использование выражения MySQL AS.

ответ

2

Вы должны указать следующее в ваших relationinvites

'invites '=>array(self::BELONGS_TO, 'CampaignFund', 'campaign_id', 'select' => 'SUM(invitesCount)'), 

и использовать это соотношение в ваших критериях.

+0

спасибо. Является ли хорошей идеей добавлять ресурсы каждый раз, когда нам нужно какое-то поле? Это эффективно? Я заметил секунды перед тем, как прочитать ваш ответ. Я могу просто определить новые общедоступные свойства и сделать выбор с помощью 'AS' для этих свойств. Не уверен, какой путь лучше? – Joe

1

Несколько других вариантов:

  1. Использование CStatRelation

    invitesCount=>array(self::STAT,'Invites','foreign_key_field'); 
    
  2. Добавление публичной собственности может работать. Однако поле будет установлено, только если вы изменили запрос поиска по умолчанию, чтобы включить это новое условие. Это можно сделать, переопределив defaultScope() или создав новый scope и используя его, когда требуется invitesCount.

  3. Другой вариант - создать представление базы данных из требуемого запроса и создать новую модель из этого представления базы данных.

+0

На самом деле вам не нужно определять новую «область». Вы можете просто изменить метод 'search', чтобы принять объект' CDbCriteria' в качестве параметра со значением по умолчанию «null», а затем объединить критерии по умолчанию с критериями из параметра. – Joe