2014-12-29 3 views
2

웹 응용 프로그램에서 페이지 매김을 실행 가능하게하려고합니다. 하지만 그것은 totalCount 속성에 정확한 번호를 부여하지 않는 것 같습니다. 그때는 나에게 행 오른쪽 번호를주고() findBySql와 객체를 사용하지만 행의 수 $ 페이지 ->에서는 totalCount 값과 일치하지 않는 경우 내 코드는 위의 코드에서Yii 2 페이지 매김이 제대로 작동하지 않습니다.

$find_query = "SELECT * FROM business WHERE status='Enabled' "; 

    $query = Business::findBySql($find_query); 

    //$query = Business::find()->where(['status' => 'Enabled']); 

    $countQuery = clone $query; 

    $pages = new Pagination(['totalCount' => $countQuery->count(), 'defaultPageSize' => 10]); 

    $data_rows = $query->offset($pages->offset) 
      ->limit($pages->limit) 
      ->all(); 

을 인걸요. 실제 결과 행 번호와 다른 번호를 부여하는 totalCount.

find()로 주석 처리 된 객체를 사용하는 경우 $ pages-> totalCount 및 $ data_rows에 동일한 행 번호가 부여됩니다.

findBySql()이 예상대로 작동하는지 확인하려면 여기를 업데이트해야합니까?

내 SQL은 다중 조인 작업이 포함 된 약간의 복잡하기 때문에 findBySql()을 사용해야합니다.

사전 감사 ..이

$find_query = "SELECT * FROM business WHERE status='Enabled' "; 

$query = Business::findBySql($find_query); 

//$query = Business::find()->where(['status' => 'Enabled']); 

$countQuery = count($query->all()); 

$pages = new Pagination(['totalCount' => $countQuery, 'defaultPageSize' => 10]); 

$data_rows = $query->offset($pages->offset) 
     ->limit($pages->limit) 
     ->all(); 

답변

2

시도 : 추가 쿼리 수정 방법을 호출, SQL 문이 이미 지정되어 있음을

주 (예 : where(), order())는 생성 된 yii \ db \ ActiveQuery 인스턴스에 영향을 미치지 않습니다.

하려고하면 SQL 문을 지정했기 때문에 Yii::$app->db->createCommand()

+1

감사합니다. 예, 이미 그런 식으로 시도했습니다. 하지만 내 질문은 totalCount가 $ pages = new Pagination ([ 'totalCount'=> $ countQuery-> count(), 'defaultPageSize'=> 10])에서 정확한 숫자를 제공하지 않는 이유입니다. – user3273871

+0

@ user3273871 내 대답을 편집했습니다 –

+0

$ query = Business :: findBySql ($ find_query);를 사용하여 페이지 매김이 작동하지 않습니다. – user3273871

0

를 사용 offsetlimit가 작동하지 않습니다 호출. 따라서 쿼리 빌더를 사용하여 쿼리를 작성하십시오. 다음은 작동해야합니다

$query = Business::find()->where(['status' => 'Enabled']); 

$pages = new Pagination(['totalCount' => $query->count(), 'defaultPageSize' => 10]); 

$data_rows = $query->offset($pages->offset) 
     ->limit($pages->limit) 
     ->all(); 
관련 문제