I have fixed this as follows:
if( ! $posts = Registry::get('post_archive')) {
$posts = Post::left_join(Base::table('users'), Base::table('users.id'), '=', Base::table('posts.author'))
->left_join(Base::table('post_meta'), Base::table('post_meta.id'), '=', Base::table('posts.id'))
->where(Base::table('posts.category'), '!=', $category_id)
->where(Base::table('posts.status'), '=', 'published')
->sort('created', 'desc')
->take($perpage)->skip(($page - 1) * $perpage)
->get(array(Base::table('posts.*'),
Base::table('users.id as author_id'),
Base::table('users.bio as author_bio'),
Base::table('users.real_name as author_name')));
Registry::set('post_archive', $posts = new Items($posts));
}