Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 2ce163c3

Von Christian Ehringfeld vor fast 9 Jahren hinzugefügt

  • ID 2ce163c308e111ab6db34730e87cb1d7292d74ab
  • Vorgänger b5d490c7
  • Nachfolger 5c3d9487

many_many selection works

Unterschiede anzeigen:

src/entitymanager.cpp
const char *classname, const bool refresh) {
auto ptr = QSharedPointer<Entity>(EntityInstanceFactory::createInstance(
classname, map));
this->resolveRelations(ptr, map, refresh);
this->cache.insert(ptr);
this->resolveRelations(ptr, map, refresh);
return ptr;
}
......
QSharedPointer<Entity> secEntityPtr = QSharedPointer<Entity>(secEntity);
QString tblName = builder->generateManyToManyTableName(entity,
secEntityPtr);
/**
* maybe it would be better, to fetch first the ids, look up cache and then request missing entities
* with this it would be also possible to respect cascade type
*/
if (this->schema->getTables().contains(tblName)) {
QSqlQuery q = builder->manyToMany(tblName,
builder->generateManyToManyColumnName(entity),
entity->getProperty(entity->getPrimaryKey()).toLongLong(),
builder->generateManyToManyColumnName(secEntityPtr),
secEntityPtr->getTablename());
entity->getProperty(entity->getPrimaryKey()).toLongLong());
auto listMap = this->convertQueryResult(q);
auto entities = this->convert(listMap, entity->getClassname(), refresh);
auto entities = QList<QSharedPointer<Entity> >();
for (int var = 0; var < listMap.size(); ++var) {
auto id = listMap.at(var).value(builder->generateManyToManyColumnName(
secEntityPtr));
if (!refresh
&& this->cache.contains(id.toLongLong(), secEntityPtr->getClassname())) {
entities.append(this->cache.get(id.toLongLong(), secEntityPtr->getClassname()));
} else {
entities.append(this->findById(id.toLongLong(), secEntityPtr->getClassname()));
}
}
this->setListProperty(entity, entities, property);
} else {
qDebug() << "MANY_TO_MANY Table " << tblName << " not exists";
......
entity->setId(-1);
rc = false;
} else {
this->cache.insert(entity);
if (persistRelations) {
this->saveRelations(entity);
}
this->cache.insert(entity);
rc = true;
}
}

Auch abrufbar als: Unified diff