EntityFieldQuery
唯一のエンティティの一つのタイプを参照することができ、それはエンティティ間のすべての関係を表現することはできません。entity_type
クエリ内のがである場合、field_collection_item
それはクエリが返すエンティティのタイプです。にEntityFieldQuery
は、フィールドコレクションがノードに関連しているという事実や、その他のことには何の概念もありません。
フィールドコレクションに関連するエンティティを取得するには、別のを実行する必要がありますEntityFieldQuery
。これまでフィールドコレクションを使用したことはありませんが、ロジックは次のようになると思います。
$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']));
そのコード(フィールドコレクションフィールドの名前、フィールドコレクションリレーションシップの列名)で変更する必要があるものがありますが、それで始められるはずです。
2クエリアプローチの実際の例:
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;
}
上記の例では:
- field_species_countries-フィールドコレクションの名前
- field_species_country-フィールドコレクション内の実際のフィールド
制限:2番目のクエリには... WHERE フィールド IN(1、2、3 ...)が含まれているため、これにはいくつかの制限があると思います。MySQLの場合、これはmax_allowed_packetによって制限されます