public static function fetch($sortby = 'id', $sortdirection = 'ASC', $limit = null, $start = null, $where = null, $joins = null)
    {
        $sortby = is_null($sortby) ? 'id' : Symphony::Database()->cleanValue($sortby);
        $sortdirection = $sortdirection === 'ASC' ? 'ASC' : 'DESC';

        $records = Symphony::Database()->fetch(sprintf(
            "SELECT a.*
            FROM `tbl_authors` AS `a`
            %s
            WHERE %s
            ORDER BY %s %s
            %s %s",
            $joins,
            ($where) ? $where : 1,
            'a.'. $sortby,
            $sortdirection,
            ($limit) ? sprintf("LIMIT %d", $limit) : '',
            ($start && $limit) ? ', ' . $start : ''
        ));

        if (!is_array($records) || empty($records)) {
            return array();
        }

        $authors = array();

        foreach ($records as $row) {
            $author = new Author;

            foreach ($row as $field => $val) {
                $author->set($field, $val);
            }

            self::$_pool[$author->get('id')] = $author;
            $authors[] = $author;
        }

        return $authors;
    }