Неправильный CSqlDataProvider сортировка атрибутов текста

0

Я использую Yii 1.1.15, и в моем ClistView у меня есть некоторые сортируемые атрибуты. Что хорошо работает, проблема в том, что тест не читается из attributeLabels() в моем классе модели.

$dataProvider=new CSqlDataProvider($sql, array(
        'params'=> array(':lat' => $lat, ':lng'=>$lng, ':radius'=>$radius),
        'totalItemCount'=>$count,
        'sort'=>array(
            'defaultOrder'=>'distance ASC',
            'attributes'=>array(
                'store','state','distance'
            ),
        ),
        'pagination'=>array(
            'pageSize'=> $perPage,
        ),
    )
);

Я должен изменить его слишком ниже, чтобы он работал.

'attributes' => array(
    'store'=>'Store Name', 
    'state'=> 'State',
    'distance'=>'Distance to Store'
),

любая идея, что мне не хватает?

вот мой attributeLabels() в моей модели

public function attributeLabels(){
    return array(
        'id' => 'ID',
        'store' => 'Store Name',
        'address' => 'Address',
        'city' => 'City',
        'state' => 'State',
        'country' => 'Country',
        'descscription' => 'Description',
        'ip' => 'Ip',
        'distance'=>'Distance to Store'
    );
}

Вот мои отношения в модели store.php для модели state

public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            '_state' => array(self::BELONGS_TO, 'state', 'state'),
            '_contact' => array(self::HAS_MANY, 'StoreContact', 'store_id'),
        );
    }
Теги:
yii

1 ответ

0
Лучший ответ

Существует огромная разница между CActiveDataProvider и CSqlDataProvider:

CActiveDataProvider

CActiveDataProvider реализует поставщика данных на основе ActiveRecord.

CSqlDataProvider

CSqlDataProvider реализует поставщика данных на основе простой инструкции SQL.

Таким образом, когда вы используете CSqlDataProvider, модель не будет иметь никакой роли, и ваш поставщик данных не будет искать какую-либо модель.

Однако, если вы хотите использовать свои атрибуты модели, вы можете использовать массив ключей в вашем CSqlDataProvider и сделать следующее:

'attributes' => array(
    'store'=> StoreModel::model()->getAttributeLabel('store'), 
    'state'=> StoreModel::model()->getAttributeLabel('state'),
    'distance'=> StoreModel::model()->getAttributeLabel('distance'),
),

Обратите внимание, что я предположил, что ваше имя модели - StoreModel

  • 0
    но использование моего CSqlDataProvider все еще показывает мою нумерацию страниц, когда мои результаты только 3. Пагинация установлена как 10

Ещё вопросы

Сообщество Overcoder
Наверх
Меню