CGridView yii.

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
akim
Сообщения: 25
Зарегистрирован: 2011.04.27, 15:49
Откуда: Москва

CGridView yii.

Сообщение akim »

Добрый вечер господа...

Помогите разобраться с CGridView.

Есть код:

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

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'kshares-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'id',
        'img',
        'title',
        'price',
        'on_top',
        'direction_id', // в этом столбике выводятся id 
        array(
            'class'=>'CButtonColumn',
        ),
    ),
));  
Обычный код. Подскажите как сделать, чтобы вместо

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

'direction_id' 
вывести имена с другой таблицы соответствующие данному id.

Я понимаю, надо сделать запрос и вытащить имя, соответствующего id. Но как это связать с CGridView не пойму.

Пробовал в

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

'value'  
вставлять код, который делает запрос и вытаскивает имена айдишников, но вылазит ошибка.


В общем нужно чтобы вместо direction_id выводилось name, взятое с другой таблицы у которой уже другая модель.

Буду рад любой помощи.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: CGridView yii.

Сообщение BuCeFaL »

'direction.name'
но лучше прочитать про отношения в AR
Аватара пользователя
yii
Сообщения: 122
Зарегистрирован: 2010.04.29, 10:40

Re: CGridView yii.

Сообщение yii »

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

'value' => '$data->RelationName->field_name' 
akim
Сообщения: 25
Зарегистрирован: 2011.04.27, 15:49
Откуда: Москва

Re: CGridView yii.

Сообщение akim »

Подставлял 'direction.name' так:

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

    $this->widget('zii.widgets.grid.CGridView', array(
        'id'=>'kshares-grid',
        'dataProvider'=>$model->search(),
        'filter'=>$model,
        'columns'=>array(
            'id',
            'img',
            'title',
            'price',
            'on_top',
            'direction.name', //  <----------
            array(
                'class'=>'CButtonColumn',
            ),
        ),
    ));   
Создался пустой столбик с заголовком name. Подскажите как теперь в name запихнуть данные,взятые с другой таблицы???

Так же пробовал 'value' => '$data->RelationName->field_name'. Но вышла ошибка, что свойства kshares.RelationName не знает.
Аватара пользователя
Psyhos
Сообщения: 124
Зарегистрирован: 2011.04.13, 15:04
Контактная информация:

Re: CGridView yii.

Сообщение Psyhos »

Можите рассмотреть мой пример: http://psyhos.blogspot.com/2011/05/yii.html
Сначала надо описать отношения таблиц в файлах модели.
А затем, в файле представления использовать

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

'name',
            array(
            'name' => 'direction_id',
            'filter' => CHtml::listData(Имя вашей модели::model()->findAll(), 'id', 'name'),
            'value' => '$data->Имя, описанное в relations->name',
        ), 
mindochin
Сообщения: 50
Зарегистрирован: 2010.12.13, 20:05

Re: CGridView yii.

Сообщение mindochin »

господа, в случае с 'direction.name' будет каждый раз обращение к связанной таблице для каждой строчки. как бы сказать CGridView что надо бы использовать жадную загрузку?
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: CGridView yii.

Сообщение BuCeFaL »

mindochin писал(а):господа, в случае с 'direction.name' будет каждый раз обращение к связанной таблице для каждой строчки. как бы сказать CGridView что надо бы использовать жадную загрузку?
http://www.yiiframework.com/doc/api/1.1 ... ria-detail
http://www.yiiframework.com/doc/api/1.1 ... ith-detail
http://www.yiiframework.com/doc/api/1.1 ... her-detail

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

$dtPrvdr = $model->search();
$dtPrvdr->criteria->with = array('direction');
 
mindochin
Сообщения: 50
Зарегистрирован: 2010.12.13, 20:05

Re: CGridView yii.

Сообщение mindochin »

подскажите еще. требуется в столбце Cdatagrid вывести сумму значений нескольких строк из связанной таблицы, типа так :

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

array('header'=>'testsum','value'=>'Invoices::model()->findBySql("SELECT IFNULL((SELECT SUM(sum) FROM ".Yii::app()->db->tablePrefix."invoices WHERE order_id = $data->id),0)")','filter'=>false), 
как это можно сделать грамотно и без лишних запросов?
здесь кол-во запросов тоже удваивается в итоге, что естественно

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

array('name'=>'invoices_sum','value'=>'Orders::model()->totals($data->id)','filter'=>false), 
Ответить