Есть страница, на которой выводятся все записи из нескольких связанных таблиц БД.
Вроде все работает, но есть одна проблема: выводится неправильное количество записей на странице.
'pageSize' вроде выставлен 10, а выводится на первой странице "Элементы 1—5 из 12.", а на второй "Элементы 6—12 из 12."
Причем, начинает выводиться правильное количество записей, если отключить "together"... но в таком случае у меня не получается сделать фильтрацию по элементам из связанных таблиц.
С Yii работаю пару недель... причем это мой первый фреймворк вообще. Что я делаю не так? Помогите пожалуйста.
Вот код из модели:
Код: Выделить всё
public function search()
{
$criteria = new CDbCriteria;
$criteria->with = array('genres', 'styles', 'country');
$criteria->together = true;
$criteria->distinct = true;
$criteria->compare('t.name', $this->name, true);
$criteria->compare('t.date', $this->date, true);
$criteria->compare('genres.id', $this->assignedGenres);
$criteria->compare('styles.id', $this->assignedStyles);
$criteria->compare('country.id', $this->assignedCountry);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 10,
),
));
}
Код: Выделить всё
public function relations()
{
return array(
'genres' => array(self::MANY_MANY, 'Genre', 'm_artist_genres(artist_id, genre_id)', 'joinType' => 'LEFT JOIN'),
'styles' => array(self::MANY_MANY, 'Style', 'm_artist_styles(artist_id, style_id)', 'joinType' => 'LEFT JOIN'),
'country' => array(self::BELONGS_TO, 'Country', 'country_id', 'joinType' => 'LEFT JOIN'),
);
}
Код: Выделить всё
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'artist-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'ajaxUpdate' => false,
'columns' => array(
'date',
'name',
array(
'name' => 'assignedGenres',
'filter' => CHtml::listData(Genre::model()->findAll(array('order' => 'name ASC')), 'id', 'name'),
'type' => 'html',
'value' => '$data->GenreNames',
),
array(
'name' => 'assignedStyles',
'filter' => CHtml::listData(Style::model()->findAll(array('order' => 'name ASC')), 'id', 'name'),
'type' => 'html',
'value' => '$data->StyleNames',
),
array(
'name' => 'assignedCountry',
'filter' => CHtml::listData(Country::model()->findAll(array('order' => 'name ASC')), 'id', 'name'),
'type' => 'html',
'value' => '$data->country->name',
),
array(
'class' => 'CButtonColumn',
),
),
));
Код: Выделить всё
SELECT DISTINCT `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`lname` AS `t0_c2`, `t`.`date` AS `t0_c3`, `t`.`country_id` AS `t0_c4`, `genres`.`id` AS `t1_c0`, `genres`.`name` AS `t1_c1`, `genres`.`lname` AS `t1_c2`, `styles`.`id` AS `t2_c0`, `styles`.`name` AS `t2_c1`, `styles`.`lname` AS `t2_c2`, `styles`.`parent_id` AS `t2_c3`, `styles`.`genre_id` AS `t2_c4`, `country`.`id` AS `t3_c0`, `country`.`name` AS `t3_c1`, `country`.`lname` AS `t3_c2` FROM `m_artist` `t` LEFT JOIN `m_artist_genres` `genres_genres` ON (`t`.`id`=`genres_genres`.`artist_id`) LEFT JOIN `m_genre` `genres` ON (`genres`.`id`=`genres_genres`.`genre_id`) LEFT JOIN `m_artist_styles` `styles_styles` ON (`t`.`id`=`styles_styles`.`artist_id`) LEFT JOIN `m_style` `styles` ON (`styles`.`id`=`styles_styles`.`style_id`) LEFT JOIN `m_country` `country` ON (`t`.`country_id`=`country`.`id`) LIMIT 10
Код: Выделить всё
SELECT DISTINCT `t`.`id` AS `t0_c0`, `t`.`name` AS `t0_c1`, `t`.`lname` AS `t0_c2`, `t`.`date` AS `t0_c3`, `t`.`country_id` AS `t0_c4`, `genres`.`id` AS `t1_c0`, `genres`.`name` AS `t1_c1`, `genres`.`lname` AS `t1_c2`, `styles`.`id` AS `t2_c0`, `styles`.`name` AS `t2_c1`, `styles`.`lname` AS `t2_c2`, `styles`.`parent_id` AS `t2_c3`, `styles`.`genre_id` AS `t2_c4`, `country`.`id` AS `t3_c0`, `country`.`name` AS `t3_c1`, `country`.`lname` AS `t3_c2` FROM `m_artist` `t` LEFT JOIN `m_artist_genres` `genres_genres` ON (`t`.`id`=`genres_genres`.`artist_id`) LEFT JOIN `m_genre` `genres` ON (`genres`.`id`=`genres_genres`.`genre_id`) LEFT JOIN `m_artist_styles` `styles_styles` ON (`t`.`id`=`styles_styles`.`artist_id`) LEFT JOIN `m_style` `styles` ON (`styles`.`id`=`styles_styles`.`style_id`) LEFT JOIN `m_country` `country` ON (`t`.`country_id`=`country`.`id`) LIMIT 10 OFFSET 10