NTD – group() a count() pro grid
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- MW
- Člen | 626
Zdravím a prosím o radu:
mám takový kus kodu, připravující data pro grid s paginatorem. Pro paginator musim poslat COUNT a nedari se me to udelat tak, aby ten count pocital i s tim group().. vraci me stále, jakoby tam ten group() nebyl..
Jak na to prosím?
class PinvoicesModel extends BaseModel {
public function getData($year) {
return $this->database->table('vynosyo')->SELECT('vynosyo.id, clients.name AS client,
(SELECT SUM(vynosyo.uhrada) FROM vynosyo WHERE vynosyo.clients_id = clients.id AND MONTH(vynosyo.duzp) = 1 AND YEAR(vynosyo.duzp) = ' . $year . ') AS leden,
(SELECT SUM(vynosyo.uhrada) FROM vynosyo WHERE vynosyo.clients_id = clients.id AND MONTH(vynosyo.duzp) = 2 AND YEAR(vynosyo.duzp) = ' . $year . ') AS unor)
....
....')
->where('vynosyo.type', 'MZDY')->where('YEAR(vynosyo.duzp)', $year)->group('vynosyo.clients_id');
}
public function prepareDataSource($filter, $year, $order = NULL) {
$filters = array();
foreach ($filter as $k => $v) {
if ($k == 'id' || is_array($v))
$filters[$k] = $v;
else
$filters[$k . ' LIKE ?'] = "%$v%";
}
$selection = $this->getData($year)->where($filters);
if ($order[0])
$selection->order(implode(' ', $order));
return $selection;
}
public function getDataSource($filter, $order, $year, Paginator $paginator = NULL) {
$selection = $this->prepareDataSource($filter, $year, $order);
if ($paginator) {
$selection->limit($paginator->getItemsPerPage(), $paginator->getOffset());
}
return $selection;
}
public function getDataSourceSum($filter, $year) {
return $this->prepareDataSource($filter, $year)->count('*'); // zde vraci count ale bez group()
}