2013-05-20 2 views
3

나는 이것에 대해 많이 조사했지만 지금까지 답을 얻지 못했다.
내가 적절한 데이터를 얻을 수 CDbCriteria 개체를 만드는거야 :Yii dataProvider 배열에 의해 주어진 데이터 순서

Array ([0] => 10 [1] => 16 [2] => 14 [3] => 15) 

사람들이 id_posts 내가 제시 할 수 있습니다 $arrayContents 배열은 다음과 같은 요소로 구성이다

$criteria = new CDbCriteria; 
$criteria->compare('id_post', $arrayContents); 

을 여기에 문제가있어 dataProvider를 사용하지만 해당 특정 순서로만 사용하십시오. 또한, 난이 방법 dataProvider의 생성 :

$dataProviderPosts = new CActiveDataProvider('Posts',array(
      'criteria' => $criteria, 
      'pagination'=>array(
        'pageSize'=>20, 
      ), 
    )); 

id_posts 표시의 순서는 10, 14, 15, 16 내가 원하는 안 하나.
나는 또한 같은 dataProvider를 만드는 시도했다 :

$dataProviderPosts = new CActiveDataProvider('Posts',array(
      'criteria'=>$criteria, 
      'sort'=>array(
        'defaultOrder'=>array('id_post'=>$arrayContents), 
      ), 
      'pagination'=>array(
        'pageSize'=>20, 
      ), 
    )); 

을하지만 그것은 단지 순서에 표시 않았다 : 16, 15, 14, 10, 내가 원하는 것을, 그래서 그냥 뒤로 그렇게하지, 내가 원하기 때문에 순서대로 표시하려면 $arrayContents의 숫자와 같이 10, 16, 14, 15를 표시하십시오.

+0

글쎄, 그것은 실제로 Yii 문제는 아니지만 db, 여기에서 절에 대한 질문입니다 http://stackoverflow.com/questions/396748/ordering-by-the-order-of-values-in- a-sql-in-clause 그러나 나는 그것을 Yii dataprovider에 적용하는 방법을 모른다. –

+0

답변 해 주셔서 감사합니다. 그것은 저에게 새로운 아이디어를주었습니다. 그러나 그들 중 누구도 지금까지 일하지 않았습니다. – user2399760

+0

'priority' 테이블에 다른 필드를 추가하십시오. 원하는대로 데이터를 표시하려면 우선 순위를 설정하십시오. 단순한! 당신의 답을위한 해결책은 아니지만, 임의의 아이디어 일 수 있습니다. 이것은 귀하의 문제를 해결할 수 있습니다. –

답변

1

CActiveDataProvider는 필요한 것을 수행하지 않습니다. 그것이 제공하는 순서는 일반 SQL 순서이며 ASC 또는 DESC 열의 조합으로 계산되어야합니다.

원하는 순서는 임의의 ID 순서와 같습니다. 모델에 '위치'와 같은 다른 항목이 없으므로 데이터를 직접 정렬해야합니다.

나는 시도하지 않았다하지만 API 후에는 종류, 데이터를 추출하기 위해 그것을 GetData의()/사항 setData() 방법을 사용하고 다시 공급자를 설정할 수 있습니다.

+0

그것은 일했다! 고맙습니다. 내가 그것을 게시 한 이후로 나는 많은 시간을 들일 필요가 없었지만, 결국 getData()와 setData()가 어떻게 작동하는지 이해 한 후에는 어느 정도 시간이 걸렸다.그것들을 구현하는 데 관심이있는 사람들은 내가 한 일과 같다 : – user2399760

+0

'$ arrayContents2 = $ dataProviderPosts-> getData(); \t \t $ arrayContents3 = $ dataProviderPosts-> getData(); \t \t $ arrayContents4 = $ arrayPhraseInContents; \t \t sort ($ arrayContents4); \t \t $ number = count ($ arrayContents); 위한 \t \t 은 ($ I = 0; $ 나 $ 번호 <; $ 난 ++) \t \t { \t \t \t $ 키 = array_search ($ arrayPhraseInContents4 [$ i]를, $ arrayPhraseInContents)를; \t \t \t $ arrayPhraseInContents2 [$ key] = $ arrayPhraseInContents3 [$ i]; \t \t \t \t} \t \t \t $ dataProviderPosts-> 사항 setData ($ arrayContents2); ' – user2399760