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'
EntityFieldQuery
クラスのみを使用すると、分類法階層に関する情報がエンティティデータに使用されるデータベーステーブルではなく、taxonomy_term_hierarchyテーブルに含まれるため、これを行うことができません。
最初に、そのテーブルから_$parent_id
_を親として持つすべての分類用語IDを取得し、次にクエリの他の部分にEntityFieldQuery
クラスを使用する必要があります。 EntityFieldQuery
クラスは、エンティティに関連付けられたフィールドの値を含むクエリを作成することを目的としているため、実際にはこのクラスでは過剰です。また、db_select()
を使用して実行される通常のクエリよりも速度が遅く、この場合はメリットがありません。