質問: ノード全体をロードせずにフィールド値を取得しますか? 多数のnidがあり、各ノードから1つのフィールド値が必要です。 1つのフィールド値を取得するためにノード全体をロードするオーバーヘッドを回避する方法はありますか?
回答: apiには何も組み込まれていないと思いますが、簡単に言えば、データベースを直接クエリするだけです。_$entity_type = 'node'; $bundle = 'page'; $nids = array(1, 2, 3); $field_values = db_select('field_revision_field_name', 'f') ->fields('f', array('entity_id', 'field_name_value')) ->condition('entity_type', $entity_type) ->condition('bundle', $bundle) ->condition('entity_id', $nids, 'in') ->condition('deleted', 0) ->execute() ->fetchallkeyed(); _これを実行すると、それぞれのノードのnidでキー設定されたフィールド値の配列が得られます。列名が必ずしも_field_name_value_であるとは限らないことに注意してください。たとえば、ノード参照フィールドの列名は_field_name_nid_になります。どちらを使用するかは、フィールドタイプによって異なります。[〜#〜]更新[〜#〜]apiでそれを行う方法があるようですが、それはきれいではなく、手動のクエリがまだ含まれています:_// get the field meta data for the field_id. $field_name = 'field_something'; $field_info = field_info_field($field_name); $field_id = $field_info['id']; // load up the properties from the node table. $nids = array(1, 2, 3); $sql = 'select * from {node} where nid in (:nids)'; $nodes = db_query($sql, array(':nids' => $nids))->fetchallassoc('nid'); // attach the single field to all nodes. field_attach_load('node', $nodes, field_load_current, array('field_id' => $field_id)); _このメソッドは、データをロードするフィールドidを指定することにより、 field_attach_load() の_$options_パラメーターを利用します。ドキュメントごとに、それは注目に値します: キャッシュから読み取られた場合など、返されたエンティティには他のフィールドのデータが含まれる場合があることに注意してください。 そのため、コードは余分なフィールドデータをロードしているように見えたかもしれませんが、指定したフィールド以外はキャッシュから取得されます。