Ein EntityFieldQuery
kann sich nur auf einen Entitätstyp beziehen, es kann keine Beziehung zwischen Entitäten darstellen. Wenn das entity_type
in Ihrer Abfrage ein field_collection_item
ist, ist dies der Entitätstyp, den die Abfrage zurückgibt. Das EntityFieldQuery
hat 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