@classmethod
def search(cls, *operator, **criterion):
    """
        Object search with criterions given in arguments.
        Returns a :class:`sqlachemy.orm.query.Query` object.

        Filters can be chained.
        """
    query = cls.session.query(cls)
    joined_class = []
    clauses = []
    for operator in list(operator):
        clauses.append(operator(cls, joined_class))
    clauses.extend(cls.process_params(joined_class, **criterion))
    query = query.join(*joined_class)
    return query.filter(*clauses)
