Search code examples
swiftvaporvapor-fluent

How to correctly handle simplified model in Fluent/Vapor?


Let's assume, I have a User model and this model contains products children (one to many relation).

In some situations, in my iOS app, I need only to display list with all users so I don't need to query my database about products.

How to preform, in the easiest way, fetching users without its children in Fluent? Do I need to create a separate model that doesn't contain products?

func getAllUsersHandler(_ request: Request) -> EventLoopFuture<[User]> {
    User.query(on: request.db).all()
}

Solution

  • The default situation is that a query on the User model will not include any Children fields in the result. To include them, you need .with(\.$products) in the query.

    You can limit the fields returned by modifying your query as in the example:

    User.query(on: request.db).field(\.$name).field(\.$email).all()
    

    This only brings those fields into the model and leaves unwanted fields in an uninitialised state. See here for more information.