def joinLayer(self, targetlayer, pkfield, sourcelayer, fkfield): """ Join the results of the SQL Server query to the pg layer """ joinInfo = QgsVectorLayerJoinInfo() # Backward compatbility QGIS3=>2 if qversion == 3: joinInfo.setTargetFieldName(pkfield) joinInfo.setJoinLayer(sourcelayer) joinInfo.setJoinFieldName(fkfield) joinInfo.setUsingMemoryCache(True) else: # QGIS 2 joinInfo.targetFieldName = pkfield joinInfo.joinLayerId = sourcelayer.id() joinInfo.joinFieldName = fkfield joinInfo.memoryCache = True targetlayer.addJoin(joinInfo) targetlayer.updateFields() return targetlayer
def execute_layers_join(layer, layer_field, column_header, fk_layer, fk_field): """ Joins two layers with specified field. :param layer: The destination layer of the merge. :type layer: QgsVectorLayer :param layer_field: The source layer of the merge. :type layer_field: String :param fk_layer: The foreign key layer object. :type fk_layer: QgsVectorLayer :param fk_field: The foreign key layer field name. :type fk_field: String :return: :rtype: """ join = QgsVectorLayerJoinInfo() join.joinLayerId = fk_layer.id() join.joinFieldName = 'id' join.setJoinFieldNamesSubset([fk_field]) join.targetFieldName = layer_field join.memoryCache = True join.prefix = '{} '.format(column_header) layer.addJoin(join)