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

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Закрыто
glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 15:32

Есть таблицы
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
        ));
Как получить список продуктов в гриде? А не все в куче?

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2013.11.05, 15:41

Что значит не все в куче?

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 15:43

выдает таблицу, где продукты повторяются

pid, id, price

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

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

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2013.11.05, 15:44

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

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 15:46

мне нужно вывести продукты, а под ними список цен... никак не идет в голову

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 15:51

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

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

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

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2013.11.05, 15:52

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

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

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

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 16:03

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

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

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2013.11.05, 16:22

Может код выложите? А то о сферическом можно долго разговаривать...

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 16:32

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>

glamurchik
Сообщения: 65
Зарегистрирован: 2011.04.27, 21:39

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

Сообщение glamurchik » 2013.11.05, 16:56

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

Закрыто