web-dev-qa-db-ja.com

特定の親用語のEntityFieldQueryを使用して分類用語を取得します

EntityFieldQueryを使用して、分類用語のTIDを取得しています。ただし、特定の親を持つ用語をリストするために、taxonomy_term_hierarchyテーブルをクロスリンクする必要がありますが、取得できません。以下のコードで

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'taxonomy_term')
      ->propertyCondition('vid', $vocabulary)
      ->propertyCondition('name', $termino)
      ->propertyCondition('parent', $parent_id)

最後の行が次の(予期される)エラーをスローしています。最後のプロパティ条件なしの同じコードは正しく動作します。どうすれば結果を達成できますか?

返されるエラーは次のとおりです。

PDOException:SQLSTATE [42S22]:列が見つかりません:1054不明な列 'taxonomy_term_data.parent' in 'where clause'

2
Cesar

EntityFieldQueryクラスのみを使用すると、分類法階層に関する情報がエンティティデータに使用されるデータベーステーブルではなく、taxonomy_term_hierarchyテーブルに含まれるため、これを行うことができません。

最初に、そのテーブルから_$parent_id_を親として持つすべての分類用語IDを取得し、次にクエリの他の部分にEntityFieldQueryクラスを使用する必要があります。 EntityFieldQueryクラスは、エンティティに関連付けられたフィールドの値を含むクエリを作成することを目的としているため、実際にはこのクラスでは過剰です。また、db_select()を使用して実行される通常のクエリよりも速度が遅く、この場合はメリットがありません。

4
kiamlaluno