web-dev-qa-db-ja.com

フィールド値でフィルターされた一連のノードとそのフィールド値を取得するクエリをどのように作成しますか?

うまくいけば、Drupal 7の経験を持つ誰かが私を正しい方向に向けることができます。

一部のノードをクエリしてグループ化し、フィールド値でソートするカスタムモジュールを作成しています。

ビューを使用しようとしましたが、必要な形式で結果を取得することができないようです。データベースに直接クエリを実行して、独自の出力を作成することにしました。

Drupal 7でノードをクエリする最も簡単な方法は何ですか?非常に複雑に書く必要のあるクエリを作成するように見えるすべてのフィールドのテーブルがあることに気づいたので?

ノードデータをクエリして結果をフィルタリング/グループ化する方法はありますか、それとも生のSQLを使用してのみ実行できますか?.

後者の場合、Drupal 7フィールド値を含むクエリの例を示していただけますか?

6
Camsoft

私はジェレミーの意見でもっと頑張ろうとする提案を2番目にします。ただし、クエリをコードで直接記述する必要がある場合は、 EntityFieldQuery を使用します。

たとえば、テキストフィールド値が「foo」のすべてのノードの数を取得するには、次のように入力します。

// Get field information
$field = field_info_field('field_name');
$query = new EntityFieldQuery;
$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'NODE TYPE')
  ->fieldCondition($field, 'value', 'foo')
  ->count();

$count = $query->execute();

カウントではなく結果が必要な場合は、カウント部分を省略して、結果をフェッチします。

foreach ($query->execute() as $entity_type => $entities) {
  foreach ($entities as $entity_id => $entity) {
  ...
  }
}

Commerce Guysも 良いブログ投稿 で簡単な使用例を詳しく説明しています。

12
jhedstrom

ビューを使用しようとしましたが、必要な形式で結果を取得することができないようです。データベースに直接クエリを実行して、独自の出力を作成することにしました。

私の最初の提案は、ビューでもっと努力することです。

Drupal 7でノードをクエリする最も簡単な方法は何ですか?非常に複雑に書く必要のあるクエリを作成するように見えるすべてのフィールドのテーブルがあることに気づいたので?

はい、そうです。それが私が最初の提案をした理由です。

ヒントの1つは、ビューを使用してクエリを実行することですが、プログラムでビューを呼び出して独自の出力を生成することもできます。

2番目のヒントは、ビューによって生成されるクエリを開始点として使用することです。

drupal 7のフィールドは、フィールドapiを介して定義されます。そのため、フィールドをどのように格納するかを調べ、クエリを定義するのに役立つように、これを調べる必要があります。それは実行できますが、簡単ではありません。

1
Jeremy French