Yii CGridView та SQL Count

Я намагаюся завантажити cGridView з результатами запиту між двома таблицями (благодійність та голоси).

Намагається показати кількість голосів у таблиці голосів для благодійної організації. Таблиця голосування має FK до таблиці добродійності.

Я міг це зробити в SQL з лівої приєднання, але cGridView вимагає об'єкта CActiveDataProvider для відображення даних, і я не впевнений, як я можу приєднатись до двох таблиць, щоб повернути результат, який не тільки розраховує, але також не показує жодних результатів дорівнюють 0 і замовляються голосами.

Я в даний час роблю:

у моделі голосування:

public function relations()
{
    return array(
        'voteCount'=>array(self::STAT, 'Vote', 'charity_id'),
    );
}

charity_id бути FK для столу милосердя.

Потім побудуйте віджет CGridView:

$criteria=new CDbCriteria(array(
'with' => 'voteCount',
));

$dataProvider=new CActiveDataProvider('Charity', array(
    'pagination' => false,
    'criteria' => $criteria,
));

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        array(
            'name'=>'vote.voteCount',
            'value'=>'CHtml::encode($data->voteCount)',
        ),
    ),
));

Зараз це повертає кілька результатів, і я не можу зрозуміти, як сортувати і додати депозит, а також.

Будь-яка допомога?

0
Я не такий гарний за критеріями, але ви можете безумовно додати умови до таких критеріїв, як - $ criteria-> condition = 'voteCount> 0'
додано Автор Uday Sawant, джерело
Для запису вам не потрібно використовувати CActiveDataProvider, також можна використовувати CSqlDataProvider, але відповідно до документації курсу CActiveDataProvider є кращим.
додано Автор bool.dev, джерело

2 Відповіді

Вам потрібні деякі незначні зміни

Vote.php (Модель голосування)

public function relations()
{
    return array(
        'voteCount'=>array(self::STAT, 'Vote', 'charity_id'),
    );
}

Додати поле в attributeLabels ()

'voteCount'=>'Votes',

і в CGridView додати колонку "Голосів"

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        'Votes',
    ),
));
0
додано

Спробуйте додати в модель добродійності

public function relations()
{
    return array(
        'vote'=>array(self::HAS_ONE, 'Vote', 'charity_id'),
    );
}

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'ajaxUpdate'=>true,
    'columns'=>array(
        'Name',
        array(
            'name'=>'Vote Count',
            'value'=>'CHtml::encode($data->vote->voteCount)',
        ),
    ),
));
0
додано
Ukrainian PHP comunity
Ukrainian PHP comunity
885 учасників

dev-ua/php