LeanMapper a visualpaginator
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Jan Tvrdík
- Nette guru | 2595
Na získání celkového počtu záznamů a zároveň výběr dat s limitem a offsetem potřebuješ pokud vím v MySQL vždy dva dotazy.
- Tirus91
- Člen | 199
@Tharos
Určitě bych mohl
<?php
namespace Tirus\Repository;
/**
* @method Topic getByUri($uri) Vrátí uživatele podle sloupce email.
*/
class ArticleRepository extends \LeanModel\Repository {
public function deleteByTopic($arg) {
return $this->connection->delete($this->getTable())->where('topic_id = ?', $arg)->execute();
}
public function findAllPublishedAndNotDeleted($visible = true, $orderBy = null, $offset = null, $limit = null) {
$selection = $this->connection->select('*')
->from($this->getTable())
->where('published=%b', true)
->where('deleted=%b', false);
if ($visible) {
$selection = $selection->where('visible=%b', $visible);
}
if ($orderBy != null) {
$selection = $selection->orderBy($orderBy);
} else {
$selection = $selection->orderBy('composed DESC');
}
if ($offset) {
$selection = $selection->offset($offset);
}
if ($limit) {
$selection = $selection->limit($limit);
}
$selection = $selection->fetchAll();
return $this->createEntities($selection);
}
public function findAll($orderBy = null, $offset = null, $limit = null) {
$statement = $this->connection->select('*')->from($this->getTable());
if ($orderBy !== null) {
$statement->orderBy($orderBy);
}
return $this->createEntities(
$statement->fetchAll($offset, $limit)
);
}
}
- Pavel Macháň
- Člen | 282
Já si do repozitáře pošlu Paginator něco ve stylu (ja to mám ještě trochu jinak kvůli fasádám):
public function findAllSomething(Paginator $paginator) {
$paginator->setItemCount($this->findCountSomething());
$statement = ....
return $this->createEntities(
$statement->fetchAll($paginator->getOffset(), $paginator->getItemsPerPage()));
}
Editoval Pavel Macháň (25. 9. 2014 12:42)
- Tharos
- Člen | 1030
@Tirus91: V té Tvé ukázce by úplně stačilo doplnit si do repositáře zhruba takovouto metodu:
findCount() {
$statement = $this->createFluent();
return $statement->removeClause('select')->select('COUNT(*)')->fetchSingle();
}
S tím, že pomocí dalších parametrů a vhodného zobecnění bys snadno
mohl získávat počet záznamů i pro ty další specifické
findBy<Parametry>
metody.