diff --git a/src/Plugin/views/field/SearchApiFieldTrait.php b/src/Plugin/views/field/SearchApiFieldTrait.php
index a68ebd4..fbd563b 100644
--- a/src/Plugin/views/field/SearchApiFieldTrait.php
+++ b/src/Plugin/views/field/SearchApiFieldTrait.php
@@ -9,6 +9,7 @@ use Drupal\Core\TypedData\ComplexDataInterface;
 use Drupal\Core\TypedData\DataReferenceInterface;
 use Drupal\Core\TypedData\ListInterface;
 use Drupal\search_api\Plugin\views\SearchApiHandlerTrait;
+use Drupal\search_api\Processor\ProcessorPropertyInterface;
 use Drupal\search_api\Utility\Utility;
 use Drupal\views\Plugin\views\field\MultiItemsFieldHandlerInterface;
 use Drupal\views\ResultRow;
@@ -208,6 +209,7 @@ trait SearchApiFieldTrait {
     $this->getQuery()->addRetrievedProperty($combined_property_path);
 
     list($datasource_id, $property_path) = Utility::splitCombinedId($combined_property_path);
+    // If $datasource_id is NULL, it will be an empty string key in the array.
     $this->retrievedProperties[$datasource_id][$property_path] = $combined_property_path;
     return $this;
   }
@@ -314,7 +316,7 @@ trait SearchApiFieldTrait {
           // Bail for rows with the wrong datasource for this property, or for
           // which this field doesn't even apply (which will usually be the
           // same, though).
-          if ($datasource_id != $row->search_api_datasource || !$this->isActiveForRow($row)) {
+          if (($datasource_id && $datasource_id != $row->search_api_datasource) || !$this->isActiveForRow($row)) {
             continue;
           }
           // Check whether there are parent objects present. If no, either load
@@ -390,6 +392,21 @@ trait SearchApiFieldTrait {
                 // that only exists on a different bundle. Unfortunately, there
                 // is no ComplexDataInterface::hasProperty() method, so we can
                 // only catch and ignore the exception.
+                if (empty($datasource_id)) {
+                  $item = $row->_item;
+
+                  $definitions = $item->getIndex()->getPropertyDefinitions();
+                  if (isset($definitions[$name]) && $definitions[$name] instanceof ProcessorPropertyInterface) {
+                    $field = $item->getField($name);
+                    $field_values = $item->getField($name)->getValues();
+                    $row->_relationship_objects[$property_path] = [
+                      \Drupal::service('typed_data_manager')->create(
+                        $field->getDataDefinition(),
+                        reset($field_values)
+                      ),
+                    ];
+                  }
+                }
               }
             }
           }
diff --git a/src/Utility/Utility.php b/src/Utility/Utility.php
index f247c90..6937e50 100644
--- a/src/Utility/Utility.php
+++ b/src/Utility/Utility.php
@@ -421,7 +421,7 @@ class Utility {
    *   \Drupal\search_api\IndexInterface::DATASOURCE_ID_SEPARATOR.
    */
   public static function createCombinedId($datasource_id, $raw_id) {
-    if (!isset($datasource_id)) {
+    if (empty($datasource_id)) {
       return $raw_id;
     }
     return $datasource_id . IndexInterface::DATASOURCE_ID_SEPARATOR . $raw_id;
