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-> стан = 'voteCount> 0
дададзена аўтар Uday Sawant, крыніца
Для запісу вы не павінны выкарыстоўваць CActiveDataProvider, можна выкарыстоўваць CSqlDataProvider таксама, але ў адпаведнасці з дакументацыяй Ofcourse CActiveDataProvider з'яўляецца пераважнай.
дададзена аўтар bool.dev, крыніца

2 адказы

Вам патрэбныя некаторыя нязначныя змены ў

Vote.php (Vote мадэль)

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
дададзена