#ifndef QUERY_RECIPE_HPP #define QUERY_RECIPE_HPP #include "matador/utils/access.hpp" #include "matador/utils/foreign_attributes.hpp" #include "matador/object/collection.hpp" #include "matador/object/object_ptr.hpp" #include "matador/object/many_to_many_relation.hpp" #include namespace demo { struct recipe; struct ingredient { unsigned int id{}; std::string name; matador::object::collection> recipes{}; ingredient()= default; ingredient(const unsigned int id, std::string name) : id(id), name(std::move(name)) {} template void process(Operator &op) { namespace field = matador::access; field::primary_key(op, "id", id); field::attribute(op, "name", name, 255); field::has_many_to_many(op, "recipe_ingredients", recipes, "ingredient_id", "recipe_id", matador::utils::fetch_type::EAGER); } }; struct recipe { unsigned int id{}; std::string name; matador::object::collection> ingredients{}; recipe()= default; recipe(const unsigned int id, std::string name) : id(id), name(std::move(name)) {} template void process(Operator &op) { namespace field = matador::access; field::primary_key(op, "id", id); field::attribute(op, "name", name, 255); field::has_many_to_many(op, "recipe_ingredients", ingredients, matador::utils::fetch_type::LAZY); } }; class recipe_ingredient : public matador::object::many_to_many_relation { public: recipe_ingredient() : many_to_many_relation("recipe_id", "ingredient_id") {} }; } #endif //QUERY_RECIPE_HPP