質問: entity_load('field_collection_item', array_keys($result['field_collection_item'])); ただし、上記のentityfieldqueryはエンティティタイプfield_collection_itemのすべての値を取得します。ただし、コンテンツタイプ「顧客」の値のみが必要です。上記のクエリの何が問題になっているのか誰にも教えてもらえますか?
回答: entityfieldqueryは1種類のエンティティのみを参照でき、エンティティ間の関係を表すことはできません。 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番目のクエリには... wherefieldin(1、2、3 ...)。 mysqlの場合、これはmax_allowed_packetによって制限されます