1


Yii リスト ビューで並べ替えを実装しようとしています。リスト ビューで provider_favourite と service_request という名前の 2 つのテーブルを結合しました。また、両方のテーブルのフィールドと内容がリスト ビューに表示されます。しかし、並べ替えは、service_request テーブルではなく、provider_favourite テーブルでのみ機能します。service_request テーブルからフィールドを並べ替えるにはどうすればよいですか? ソートには csort を使用しています。CGridビューも試しました。しかし、グリッドビューでも同じ問題が発生しています..
次のコードを使用して参加しています

 $criteria = new CDbCriteria;
    $criteria->select = 'favourite_notes,favourite, favourite_added_date,max_budget,preferred_location,service_name';
    $criteria->join = 'LEFT JOIN service_request AS s ON  service_request_id = favourite';
    $criteria->condition = 'favourite_type = 1';
    $sort=new CSort('ProviderFavourite');
 //        $sort->defaultOrder='s.max_budget ';
    $sort->applyOrder($criteria);
    $sort->attributes = array(
            'max_budget' => 'service_request.max_budget',
            'service_name' => 'service_request.service_name',
            'favourite_added_date'
    );
        $type = 2;
    $data = new CActiveDataProvider('ProviderFavourite', array('criteria' => $criteria, 'pagination' => array('pageSize' => 4),'sort'=>$sort
            ));
    $this->renderPartial('favourites', array(
        'ModelInstance' => ProviderFavourite::model()->findAll($criteria),
        'dataProvider' => $data, 'type' => $type, 'sort'=>$sort,
    ));

また、リストビューで並べ替え可能な属性を提供しています

 $this->widget('zii.widgets.CListView', array('dataProvider'=>$dataProvider,'itemView'=>'index_1',     
         'id'=>'request',
         'template' => '  {items}{pager}',
         'sortableAttributes'=>array('favourite_notes','max_budget','service_name')
 )); 

詳細が必要な場合は、提供します。前もって感謝します

4

2 に答える 2

2

インスタンスの属性プロパティを指定する必要があり$sortます。デフォルトでは、$modelClass (ProviderFavouriteあなたの場合) のフィールドのみがソート可能です。

次のようになると思います(テストされていません):

$sort->attributes = array(
    'service_name' => array(
        'asc' => 's.service_name ASC',
        'desc' => 's.service_name DESC'
    ),
    // ...another sortable virtual attributes from service_request table
    "*"
);
于 2013-04-17T11:22:27.017 に答える