@@ -45,19 +45,27 @@ QgsRelation RelationUtils::resolveReferencingRelation( QgsProject *project, QgsV
4545 return QgsRelation ();
4646}
4747
48- QgsRelation RelationUtils::createRelation ( const QgsVectorLayer *referencedLayer, const QString &referencedFieldName, const QgsVectorLayer *referencingLayer, const QString &referencingFieldName )
48+ QgsRelation RelationUtils::createRelation ( const QgsVectorLayer *referencedLayer, const QgsVectorLayer *referencingLayer, const QVariantMap &fieldPairs )
4949{
50- if ( !referencedLayer || !referencingLayer )
50+ if ( !referencedLayer || !referencingLayer || fieldPairs. isEmpty () )
5151 return QgsRelation ();
5252
53- const QString relationId = QStringLiteral ( " %1_%2_%3_%4" ).arg ( referencedLayer->id (), referencedFieldName, referencingLayer->id (), referencingFieldName );
53+ QStringList fieldPairStrings;
54+ for ( QVariantMap::const_iterator it = fieldPairs.constBegin (); it != fieldPairs.constEnd (); ++it )
55+ {
56+ fieldPairStrings.append ( QStringLiteral ( " %1_%2" ).arg ( it.key (), it.value ().toString () ) );
57+ }
58+ const QString relationId = QStringLiteral ( " %1_%2_%3" ).arg ( referencedLayer->id (), fieldPairStrings.join ( " _" ), referencingLayer->id () );
5459
5560 QgsRelation relation;
5661 relation.setId ( relationId );
57- relation.setName ( QStringLiteral ( " %1 (%2) <-> %3 (%4)" ).arg ( referencedLayer->name (), referencedFieldName , referencingLayer->name (), referencingFieldName ) );
62+ relation.setName ( QStringLiteral ( " %1 (%2) <-> %3 (%4)" ).arg ( referencedLayer->name (), fieldPairs. constBegin (). key () , referencingLayer->name (), fieldPairs. constBegin (). value (). toString () ) );
5863 relation.setReferencedLayer ( referencedLayer->id () );
5964 relation.setReferencingLayer ( referencingLayer->id () );
60- relation.addFieldPair ( referencingFieldName, referencedFieldName );
6165
66+ for ( QVariantMap::const_iterator it = fieldPairs.constBegin (); it != fieldPairs.constEnd (); ++it )
67+ {
68+ relation.addFieldPair ( it.value ().toString (), it.key () );
69+ }
6270 return relation;
6371}
0 commit comments