#include "authorrepository.h" #include #include #include #include #include #include #include #include #include namespace repository { AuthorRepository::AuthorRepository(odb::core::database& db) : m_db(db) {} QVector AuthorRepository::findAll() { odb::transaction t(m_db.begin()); odb::result res(m_db.query()); QVector authors; for (auto it = res.begin(); it != res.end(); ++it) { const auto& author = *it; authors.push_back(author); } t.commit(); return authors; } Author_S AuthorRepository::findById(int id) { odb::transaction t(m_db.begin()); odb::result res(m_db.query(odb::query::id == id)); Author_S author; res.value(author); t.commit(); return author; } QVector AuthorRepository::findByBook(const int& bookId) { odb::transaction t(m_db.begin()); QVector authors; using ABQuery = odb::query; using ABResult = odb::result; ABResult abResult(m_db.query(ABQuery::book == bookId)); for (const AuthorBook_S& ab : abResult) { // Загружаем каждую книгу по ID SH author(m_db.load(ab.author()->id())); authors.push_back(*author.data()); } t.commit(); return authors; } QVector AuthorRepository::findByBook(const QString& book_name) { odb::transaction t(m_db.begin()); auto book_s = m_db.query(odb::query::title == book_name).one(); return findByBook(book_s->id()); } } // namespace repository