Revision 4e75d5a1
Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt
src/entitymanager.cpp | ||
---|---|---|
this->db->startTransaction();
|
||
auto builder = this->schema->getQueryBuilder();
|
||
q = builder->manyToManyInsert(tblName,
|
||
builder->generateManyToManyColumnName(entity),
|
||
builder->generateManyToManyColumnName(ptr));
|
||
builder->generateManyToManyColumnName(entity,r.getPropertyName()),
|
||
builder->generateManyToManyColumnName(ptr,r.getMappedBy()));
|
||
q.bindValue(0, entity->getProperty(entity->getPrimaryKey()));
|
||
auto prop = EntityHelper::mappedProperty(r, ptr);
|
||
QSharedPointer<Entity> item;
|
||
... | ... | |
QString tblName = builder->generateManyToManyTableName(e, ptr, r);
|
||
if (this->schema->getTables().contains(tblName)) {
|
||
QSqlQuery q = builder->manyToManyDelete(
|
||
tblName, builder->generateManyToManyColumnName(e),
|
||
tblName, builder->generateManyToManyColumnName(e,r.getPropertyName()),
|
||
e->getProperty(e->getPrimaryKey()).toLongLong());
|
||
if (this->db->exec(q)) {
|
||
bool refresh = r.getCascadeType().contains(CascadeType::REFRESH)
|
||
... | ... | |
* @todo diff and remove entity from relational object when association is deleted
|
||
*/
|
||
q = builder->manyToManyDelete(
|
||
tblName, builder->generateManyToManyColumnName(entity),
|
||
tblName, builder->generateManyToManyColumnName(entity,r.getPropertyName()),
|
||
entity->getProperty(entity->getPrimaryKey()).toLongLong());
|
||
ok = this->db->exec(q);
|
||
} else {
|
||
... | ... | |
relation);
|
||
if (this->schema->getTables().contains(tblName)) {
|
||
QSqlQuery q = builder->manyToMany(tblName,
|
||
builder->generateManyToManyColumnName(entity),
|
||
builder->generateManyToManyColumnName(entity,relation.getPropertyName()),
|
||
entity->getProperty(entity->getPrimaryKey()).toLongLong());
|
||
auto listMap = this->convertQueryResult(q);
|
||
auto secClassName = EntityHelper::getClassName(secEntityPtr.data());
|
||
QSharedPointer<Entity> e;
|
||
for (int var = 0; var < listMap.size(); ++var) {
|
||
auto id = listMap.at(var).value(builder->generateManyToManyColumnName(secEntityPtr));
|
||
auto id = listMap.at(var).value(builder->generateManyToManyColumnName(secEntityPtr,relation.getMappedBy()));
|
||
if (refresh || !(this->cache.contains(id.toLongLong(), secClassName) &&
|
||
(e = this->cache.get(id.toLongLong(), secClassName)))) {
|
||
e = this->findById(id.toLongLong(), secClassName);
|
Auch abrufbar als: Unified diff
many-to-many table name resolve