Я использую 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'),
);
}
Существует огромная разница между CActiveDataProvider
и CSqlDataProvider
:
CActiveDataProvider реализует поставщика данных на основе ActiveRecord.
CSqlDataProvider реализует поставщика данных на основе простой инструкции SQL.
Таким образом, когда вы используете CSqlDataProvider
, модель не будет иметь никакой роли, и ваш поставщик данных не будет искать какую-либо модель.
Однако, если вы хотите использовать свои атрибуты модели, вы можете использовать массив ключей в вашем CSqlDataProvider
и сделать следующее:
'attributes' => array(
'store'=> StoreModel::model()->getAttributeLabel('store'),
'state'=> StoreModel::model()->getAttributeLabel('state'),
'distance'=> StoreModel::model()->getAttributeLabel('distance'),
),
Обратите внимание, что я предположил, что ваше имя модели - StoreModel
CSqlDataProvider
все еще показывает мою нумерацию страниц, когда мои результаты только 3. Пагинация установлена как 10