2014-11-28 1 views
0

내 문제를 설명해 주시고, 그것이 무엇인지 알기를 바랍니다.Yii2 외부 데이터 검색 어려움

공용 액세스를 숨기고 웹 사이트에서 서비스에 사용하는 mysql sql 쿼리의 안전한 방법을 설계했습니다. 그래서 내가 실제로 Yii2의 현재 모델 레이어를 사용할 수 있다고 생각하지 않습니다. 그리고 이것은 또한 데이터베이스가 존재하지 않기 때문에 activeDataProvider을 거의 사용할 수 없다는 것을 의미합니다.

현재 내가하는 일은 raw sqls를 작성하고 모든 결과를 얻은 다음 ArrayDataProvider을 사용하여 dataprovider로 피드하는 것입니다.

$sql="select * from a_table"; 
$result=$remote->select($sql); 

$dataProvider = new ArrayDataProvider([ 
    'allModels' => $result, 
    'sort' => [ 
     'attributes' => ['date', 'name'], 
    ], 
    'pagination' => [ 
     'pageSize' => 10, 
    ], 
]); 

return $this->render('index', [ 
    'dataProvider' => $dataProvider, 
]); 

이 문제는 모든 테이블을 쿼리해야 할 때마다 발생합니다. 테이블이 매우 큰지는 알 수 없습니다. 내가이 문제를 해결하려면 어떻게 ... 내가

$sql="select * from a_table LIMIT 10"; 

더 매김 내 경우에는 표시되지 않습니다 할하지만 경우, 10 일의 크기에 조회하는 것이 좋습니다? 이것이 외부 데이터 서비스와 대화하는 아이디어가 아니라면 UR은 무엇입니까?

+0

페이지 크기가 10이고 결과도 10입니다. 그래서 페이지 매김은 어떤 역할도하지 않습니다. –

+0

아니요, 제 결과는 테스트를위한 10 개가 넘는 결과입니다. – onegun

답변

0

ArrayDataProvider에 10 개의 행만 공급하기 때문에 페이지 매김이 나타나지 않으며 더 많은 것을 알 수있는 방법이 없습니다.

원격 페치와 DataProvider를 사용하려면 내가 BaseDataProvider 및 최우선 적어도 다음 네 가지 방법 확장하여 자신의 MyRemoteDataProvider 클래스를 만들 수 권합니다 ..

use yii\data\BaseDataProvider; 

class MyRemoteDataProvider extends BaseDataProvider 
{ 
    protected function prepareModels() 
    { 
    } 

    protected function prepareKeys($models) 
    { 
    } 

    protected function prepareTotalCount() 
    { 
    } 

    protected function sortModels($models, $sort) 
    { 
    } 
} 

을 다음 물론 당신의 MyRemoteDataProvider를 사용 ArrayDataProvider 대신. 메소드가 반환해야하는 것이 무엇인지 모르는 경우 BaseDataProvider에 대한 설명서를 읽거나 ArrayDataProvider 구현에 영감을 얻으십시오.