La paginación en algo básico en proyectos web y una relación ternaria es algo bastante común en bases de datos. Consiste en tener una tabla que relacione mediante ids a otras dos tablas, por ello esas dos tablas se van a conocer a través de la que contiene los ids.

Aquí se tratará el ejemplo de unos artículos (tabla articulos) que tienen X categorías (tabla categorías), por lo que crearemos una tabla llamada articulos_has_categorias que es la que contiene los ids de referencia a los otras tablas. Esos ids se llamarán articulo_id y categoria_id. De este modo un artículo puede tener una o más categoriás.

Ahora tendremos dos opciones o bien crear las relaciones en los modelos de phalcon manualmente siguiendo esta info de la página de phalconphp 3.X o crear las foreing keys en base de datos (solo hace falta en la tabla de relaciones de ids) y crear los modelos con el comando:

phalcon create-model --name=articulos
phalcon create-model --name=categorias
phalcon create-model --name=articulos_has_categorias

Con esto phalconphp ya te creará las relaciones en los modelos como el ejemplo del enlace anterior.

Ahora al hacer una query al modelo Articulos, nos va a traer esas categorías.

Creamos la paginación ayudándonos del PaginatorQueryBuilder.

use Phalcon\Paginator\Adapter\QueryBuilder as PaginatorQueryBuilder;

En mi caso para la query utilizaré el createBuilder para realizar la query y le pasaré una condición de que el articulo esté activo.

$parameters['conditions'] = 'Articulos.activo = 1';
$builder = $this->modelsManager->createBuilder($parameters)
            ->columns(['Articulos.*'])
            ->from(['Articulos' => 'Salamandra\Models\Articulos'])
            ->orderBy('Articulos.created DESC')
            ->groupBy('Articulos.id');

La paginación en el controller:

$paginator = new PaginatorQueryBuilder(
    [
        'builder' => $builder,
        'limit'   => 1,
        'page'    => $numberPage,
    ]
);
$this->view->page = $paginator->getPaginate();

Y la view quedaría con un título, enlace y con nuestra/s categoría/s recogidas de la relación ternaría:

<?php if ($page->total_items != 0) { ?>
    <?php foreach ($page->items as $articulo): ?>
        <h1>
            <?php echo $this->tag->linkTo('/articulos/' . $articulo->slug, $articulo->nombre_articulo); ?>
        </h1>
        <p>
            <?php
                foreach ($articulo->ArticulosHasCategorias as $articuloCategoria) {
                    $categorias .= $articuloCategoria->Categorias->nombre_categoria . ', ';
                }
                // se pintan las categorías del artículo separadas por comas
                echo trim($categorias, ', ');
            ?>
        </p>
    <?php endforeach; ?>
<?php } ?>

<div class="paginacion">
    <p><?php echo $page->current, "/", $page->total_pages ?></p>
    <ul>
        <li><?php echo $this->tag->linkTo("articulos", "Primero") ?></li>
        <li><?php echo $this->tag->linkTo("articulos?page=" . $page->before, "Anterior") ?></li>
        <li><?php echo $this->tag->linkTo("articulos?page=" . $page->next, "Siguiente") ?></li>
        <li><?php echo $this->tag->linkTo("articulos?page=" . $page->last, "Último") ?></li>
    </ul>
</div>