Models with one-to-many connections are lazy-loaded when accessing the connected property, so accessing a relation is as simple as: ```swift do { guard let queriedPost = try await Amplify.DataStore.query(Post.self, byId: "123"), let comments = queriedPost.comments else { return } // call fetch to lazy load the postResult before accessing its result try await comments.fetch() for comment in comments { print("\(comment)") } } catch let error as DataStoreError { print("Failed to query \(error)") } catch let error as CoreError { print("Failed to fetch \(error)") } catch { print("Unexpected error \(error)") } ``` ```swift let sink = Amplify.Publisher.create { try await Amplify.DataStore.query(Post.self, byId: "123") }.sink { if case let .failure(error) = $0 { print("Error retrieving post \(error.localizedDescription)") } } receiveValue: { queriedPost in guard let queriedPost = queriedPost, let comments = queriedPost.comments else { return } // call fetch to lazy load the postResult before accessing its result Task { do { try await comments.fetch() for comment in comments { print("\(comment)") } } catch let error as CoreError { print("Failed to fetch \(error)") } catch { print("Unexpected error \(error)") } } } ``` The connected properties are of type `List`, where `M` is the model type, and that type is a custom [Swift Collection](https://developer.apple.com/documentation/swift/collection), which means that you can `filter`, `map`, etc: ```swift let excitedComments = comments .compactMap { $0.content } .filter { $0.contains("Wow!") } ```