Страница 1 из 1

Передача dataProvider в грид

Добавлено: 2013.11.05, 15:32
glamurchik
Есть таблицы
products: id, cid, name
prices: id, pid, price

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

$criteria=new CDbCriteria(array(                    
                                'with'   => array('prices'=>array(
                                    'pid'=>'id',
                                )),
        ));
        
        $dataProvider=new CActiveDataProvider('Products', array(
            'criteria'=>$criteria
        ));
Как получить список продуктов в гриде? А не все в куче?

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:41
yiijeka
Что значит не все в куче?

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:43
glamurchik
выдает таблицу, где продукты повторяются

pid, id, price

6, 1234, 8.00
6, 1236, 12.00
7, 1268, 8.00

и в гриде они постранично разбиваются неправильно

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:44
yiijeka
ну просто у вас связь, и вы запрос делаете получается выбрать все цены для товаров. Т.к. цен много вот они и повторяются. Вам какая цена нужна?

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:46
glamurchik
мне нужно вывести продукты, а под ними список цен... никак не идет в голову

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:51
glamurchik
Продукт1
цена 8.00
цена 12.00

Продукт2
цена 8.00

Продукт3
цена 8.00
цена 12.00
цена 24.00

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 15:52
yiijeka
Разбейте это на две задачи - так проще придёт в голову ;)
1. Вывести список товаров. - это вы должны легко сделать сами ;)
2. Вывести цены для товаров:

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

foreach ($Products->prices as $prModel) {
echo 'Цена ' . $prModel->price;
} 

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 16:03
glamurchik
я как бы так и делаю, но количество продуктов у меня выходит больше чем на самом деле и цены строятся под продуктами великолепно...

Количество страниц с ошибкой, должно быть 2 а выводит аж 10

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 16:22
yiijeka
Может код выложите? А то о сферическом можно долго разговаривать...

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 16:32
glamurchik
Model:

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

public function relations()
    {
        return array(
            'prices' => array(self::HAS_MANY, 'Prices', array('pid'=>'id'), 'order'=>'prices.price ASC'),
        );
    }
Controller:

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

$criteria=new CDbCriteria(array(                    
                                'with'   => array('prices'=>array(
                                    'pid'=>'id',
                                )),
        ));
        
        $dataProvider=new CActiveDataProvider('Products', array(
            'criteria'=>$criteria
        ));
        $this->render('view', array(
                                      'products' => $dataProvider,
                                 ));
View:

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

$this->widget('zii.widgets.CListView', array(
            'dataProvider'=>$products,
            'itemView'=>'_view',
            'template'=>'{pager}{items}{pager}',
        )); 
_view:

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

<h2><?php echo $data->name; ?></h2>
<ul>
<?php 
            foreach($data->prices as $price) {
                echo '<li><a id="'.$price->id.'">'.$price->price.'</a></li>';
            }
            ?></ul>

Re: Передача dataProvider в грид

Добавлено: 2013.11.05, 16:56
glamurchik
я прошу прощения! у меня все получилось, проблема была в condition, который че-то решил упустить...