web-dev-qa-db-ja.com

ノードフィールドをdb_select()でクエリに追加する。

db_select();を使用してクエリを作成しています。フィールドを使用して追加したフィールドで結果を並べ替える必要があります。 field_data_field_fieldnameとリビジョンを結合するよりも良い方法はありますか?

私は$query->addFieldData("field_foo", "myfoo");のようなものを望んでいたので、単純に$query->orderBy('myfoo', 'asc');

ノードフィールドを結合するAPIに例がないのも不思議です。

1
Nils Riedemann

私の知る限りでは、db_select()はエンティティまたはフィールド(フィールドなど、ノードに追加されるフィールドのコンテキスト)を認識しません。

フィールドテーブルへの結合を自分で行う必要があると思います。私は dbtng_example--dbtng_example.module から少し例を見つけましたが、私の直感と以下のコメントに従って-EntityFieldQueryが実際にこれを行う唯一の正しい方法です。フィールドは、db_selectを完全に破壊する独自のストレージを定義できるため、...

少しのパフォーマンスヒット(ほとんどの場合無視できる)では、実際にそれを実行する必要がありますDrupal 7つの方法...

Drupal 7のコアにはフィールドがあり、それに伴って EntityFieldQuery は、プロパティ(公開ステータスなど)またはフィールド(field_page_photoなど)によってエンティティ(ノード、用語など)を検索するためのクエリクラスですまたはUIまたはその他の方法で追加したその他のフィールド)

またはAPIから:

このクラスを使用すると、エンティティプロパティ(たとえば、node-> changed)、フィールド値、および一般的なエンティティメタデータ(バンドル、エンティティタイプ、エンティティID、リビジョンID)に基づいてエンティティを検索できます。

ここにいくつかの良い例と議論があります:

EntityFieldQueryの適切な用途は何ですか?

そして、私は自分自身を参照していると思います EntityFieldQueryの例が必要ですか? も。

4
electblake