Ein EntityFieldQuerykann sich nur auf einen Entitätstyp beziehen, es kann keine Beziehung zwischen Entitäten darstellen. Wenn das entity_typein Ihrer Abfrage ein field_collection_itemist, ist dies der Entitätstyp, den die Abfrage zurückgibt. Das EntityFieldQueryhat keine Vorstellung davon, dass Ihre Feldsammlungen mit Knoten oder irgendetwas anderem in Verbindung stehen.
Um die Entitäten zu erhalten, die sich auf die Feldsammlungen beziehen, müssen Sie eine andere ausführen EntityFieldQuery. Ich habe noch keine Feldsammlung verwendet, aber ich würde vermuten, dass die Logik ungefähr so aussehen würde:
$query = new EntityFieldQuery;
$query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'customer')
->fieldCondition('field_name_of_collection_field', 'name_of_field_collection_column', array_keys($result['field_collection_item']));
Es gibt Dinge, die in diesem Code geändert werden müssen (der Name Ihres Feldsammlungsfelds, der Spaltenname für die Feldsammlungsbeziehung), aber es sollte Ihnen den Einstieg erleichtern.
Tatsächliches Beispiel für den Zwei-Abfragen-Ansatz:
function get_species_country($id_country) {
$inner = new EntityFieldQuery();
$inner_r = $inner->entityCondition('entity_type', 'field_collection_item')
->fieldCondition('field_species_country', 'target_id', $id_country, '=')
->execute();
if(!empty($inner_r['field_collection_item'])) {
$keys = array_keys($inner_r['field_collection_item']);
$query = new EntityFieldQuery();
$species_r = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', self::$bundle)
->fieldCondition('field_species_countries', 'value', $keys)
->execute();
if(!empty($species_r['node'])) {
$ret = node_load_multiple(array_keys($species_r['node']));
}
}
return $ret;
}
Im obigen Beispiel:
- field_species_countries - Name der Feldsammlung
- field_species_country - Tatsächliches Feld innerhalb der Feldsammlung
Einschränkungen : Ich denke, dies hat einige Einschränkungen, da die zweite Abfrage ... WHERE- Feld IN (1, 2, 3 ...) enthält. Für MySQL ist dies durch max_allowed_packet begrenzt