Pagination on child object that belongs to various parent object types

more complex, yes - but not by much. Basically save your results without pagination in a query variable, then use the query variables in another query without cascade.

eg: (didnt run this btw)


query {
    l0 as var(func: anyoftext(State.name, "new york")) @cascade {
        l1 as ~City.state {
            l2 as ~Address.city {
                l3 as ~Restaurant.address 
            }
        }
    }
  Restaurants (func: uid(l0)) {
    State.name
    ~City.state @filter(uid(l1)) {
      City.name
      ~Address.city @filter(uid(l2)) (first:10, offset:10)  {
        Address.address1
        ~Restaurant.address @filter(uid(l3)) {
           Restaurant.name 
        }
      }
    }
  }
}

(or something like that)