decorate($stmt, $searchQuery); } protected static function decorateCustom(Sql\SelectStatement $stmt) { } protected static function decoratePager(Sql\SelectStatement $stmt, $perPage, $page) { if ($perPage === null) return; $stmt->setLimit( new Sql\Binding($perPage), new Sql\Binding(($page - 1) * $perPage)); } public static function getEntitiesRows($searchQuery, $perPage = null, $page = 1) { $modelClassName = self::getModelClassName(); $table = $modelClassName::getTableName(); $stmt = new Sql\SelectStatement(); $stmt->setColumn($table . '.*'); $stmt->setTable($table); static::decorateParser($stmt, $searchQuery); static::decorateCustom($stmt); static::decoratePager($stmt, $perPage, $page); return Database::fetchAll($stmt); } public static function getEntities($searchQuery, $perPage = null, $page = 1) { $modelClassName = self::getModelClassName(); $rows = static::getEntitiesRows($searchQuery, $perPage, $page); return $modelClassName::convertRows($rows); } public static function getEntityCount($searchQuery) { $modelClassName = self::getModelClassName(); $table = $modelClassName::getTableName(); $innerStmt = new Sql\SelectStatement(); $innerStmt->setTable($table); static::decorateParser($innerStmt, $searchQuery); static::decorateCustom($innerStmt); $innerStmt->resetOrderBy(); $stmt = new Sql\SelectStatement(); $stmt->setColumn(new Sql\AliasFunctor(new Sql\CountFunctor('1'), 'count')); $stmt->setSource($innerStmt); return Database::fetchOne($stmt)['count']; } }