0
と呼ばれていません、私はカスタムクエリを構築し、このように、デフォルトのページネータを使用してみました:CakePHPのカスタムクエリページネータに:カスタムのpaginate関数が
WodsController.php
$userId = $this->Auth->user('id');
$connection = ConnectionManager::get('default');
$result = $connection->execute("SELECT wods.id, wods.titulo , wods.dia , wods.tempo, wods.repeticoes ,userwods.user_id FROM wods
LEFT JOIN userwods ON userwods.wod_id = wods.id WHERE userwods.user_id is null or userwods.user_id=4 order by wods.dia desc limit 50")->fetchAll('assoc');
$results = array();
foreach ($result as $r) {
$entity = $this->Wods->newEntity($r);
array_push($results, $entity);
}
$wods = $this->paginate($results);
$this->set('_serialize', ['wods']);
私はできません「このエラーを得ました「ページネートと互換性のあるオブジェクトを見つける」。
今私はカスタムクエリpaginatorを実装しようとしていますが、動作しません。 モデルにpaginate関数とpaginateCount関数を実装しました。 Wods.phpファイル:WodsController.php
public function index()
{
$this->Wods->recursive = 0;
$this->paginate = array('Wods'=>array('limit'=>10));
$this->set('wods', $this->paginate('Wods'));
}
コントローラで
public function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()) {
$recursive = -1;
$this->useTable = false;
$sql = '';
$sql .= "SELECT wods.id, wods.titulo , wods.dia , wods.tempo, wods.repeticoes ,userwods.user_id FROM wods LEFT JOIN userwods ON userwods.wod_id = wods.id WHERE userwods.user_id is null or userwods.user_id=4 order by wods.dia desc limit ";
// Adding LIMIT Clause
$sql .= (($page - 1) * $limit) . ', ' . $limit;
$results = $this->query($sql);
return $results;
}
public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
$sql = '';
$sql .= "SELECT wods.id, wods.titulo , wods.dia , wods.tempo, wods.repeticoes ,userwods.user_id FROM wods LEFT JOIN userwods ON userwods.wod_id = wods.id WHERE userwods.user_id is null or userwods.user_id=4 order by wods.dia desc";
$this->recursive = $recursive;
$results = $this->query($sql);
return count($results);
}
しかしがカスタムページネータが呼び出されていない、それはデフォルトのpaginate関数を呼び出し続けます。どうして ?
あなただけの10にページごとの数の行を変更しようとしていますか?そうであれば、デフォルトのpaginate関数を使い、 '$ this-> paginate = array( 'limit' => 10);' '$ this-> paginate(); 'と呼ぶことができます。 – dragmosh
デフォルトのページ設定機能は、カスタムクエリがあるときに機能します。私は試して、これを覚えました:「ページナンバーと互換性のあるオブジェクトを見つけることができません」 –
カスタムページネーションを使ってCakePHP ORMを回避しようとしているようです。それに対して私は助言したい。 CakePHPのORMを使用してほとんどのカスタムクエリ(結合、グループ、サブクエリ、およびパラメータによる順序を含む)を記述し、それを実行するようにページ設定を設定することができます。 – dragmosh