Страница 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, который че-то решил упустить...