0

AJAXベースのZend_Paginatorを作成しましたが、クエリからすべてのレコードをフェッチしたくありません。例えば; 1ページに10個のアイテムがあるので、クエリが10行だけをフェッチするようにします。

コードは次のとおりです:-

$request = $this->getRequest();
$phone_service_id  =  $request->getParam("id");
$registry = Zend_Registry::getInstance();  
$DB = $registry['DB'];
$sql ="SELECT caller_name,call_number,call_start_time,call_duration,call_direction
       FROM CALL_LOG
       WHERE phone_service_id = $phone_service_id";
$result = $DB->fetchAll($sql);
$page=$this->_getParam('page',1);
$paginator = Zend_Paginator::factory($result);
$paginator->setItemCountPerPage(10);
$paginator->setCurrentPageNumber($page);
$this->view->paginator=$paginator;
$page = $paginator->getCurrentPageNumber();
$perPage = $paginator->getItemCountPerPage();
$total = $paginator->getTotalItemCount();
$A = ($page - 1) * $perPage + 1;
$B = min($A + $perPage - 1, $total);
$C = $total;
$this->view->assign('url', $request->getBaseURL());
$this->view->assign('total',$total );
$this->view->assign('page',$page );
$this->view->assign('A',$A );
$this->view->assign('B',$B );
$this->view->assign('C',$C );

クエリを制限して、最初のページの10行を最初に抽出し、2番目のページの場合は11行から20行までしか抽出しないようにするにはどうすればよいですか?

4

3 に答える 3

2

Zend_Db_Selectオブジェクトへのクエリを作成します。次に、Zend_Paginator_Adapter_DbSelectを使用します。クエリに制限とオフセットが自動的に追加されます。

于 2012-02-02T10:13:15.113 に答える
2

あなたはこのようなことをすることができます

$select = $DB->select()
             ->from('CALL_LOG', array('caller_name','call_number','call_start_time','call_duration','call_direction'))
             ->where('phone_service_id = ?', $phone_service_id);
$adapter = new Zend_Paginator_Adapter_DbSelect($select);
$paginator = new Zend_Paginator($adapter);

その後、残りのコード。

于 2012-02-02T12:19:13.000 に答える
1

Zend_Paginatorのマニュアルページを見ると、Zend_PaginatorにZend_Selectオブジェクトを提供すると、必要な動作がすでに組み込まれていることがわかります。現時点では、配列を提供しています。

これを変更するには、次のようにコードを変更する必要があります。-

$request = $this->getRequest();
$phone_service_id  =  $request->getParam("id");

//altered code follows
$select = new Zend_Db_Select(Zend_Db_Table::getDefaultAdapter());
$select = $DB->select()
         ->from('CALL_LOG', array(
                'caller_name',
                'call_number',
                'call_start_time',
                'call_duration',
                'call_direction'))
         ->where('phone_service_id = ?', $phone_service_id);
$paginator = Zend_Paginator::factory($select);
//End of altered code

$paginator->setItemCountPerPage(10);
$page=$this->_getParam('page',1);
$paginator->setCurrentPageNumber($page);
$this->view->paginator=$paginator;
$page = $paginator->getCurrentPageNumber();
$perPage = $paginator->getItemCountPerPage();
$total = $paginator->getTotalItemCount();
$A = ($page - 1) * $perPage + 1;
$B = min($A + $perPage - 1, $total);
$C = $total;
$this->view->assign('url', $request->getBaseURL());
$this->view->assign('total',$total );
$this->view->assign('page',$page );
$this->view->assign('A',$A );
$this->view->assign('B',$B );
$this->view->assign('C',$C );

Zend_Paginatorは、必要に応じてデータベースにクエリを実行するようになりました。
Zend Frameworkを正常に使用するための前提条件は、マニュアルAPIドキュメントを読んでおくことです。これがないと、本当に苦労します。

個人的には、コードが最適なドキュメントであることがわかりました。その時点で使用しているコンポーネントが何であれ、それを読む必要があります。多くのことを学ぶことができます。

このコードをテストすることはできませんでしたが、機能しない理由はわかりません。

于 2012-02-02T13:09:13.697 に答える