エンティティ参照モジュールを使用しており、親が定義されていないすべてのノードを選択します。私は試しています:
$query = new EntityFieldQuery();
$children = $query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1)
->fieldCondition('field_parent', 'target_id', null, 'IS NULL')
->execute();
..しかし、フィールド "field_parent"が欠落しており、NULLに設定されていないため、何も表示されません。 IS NOT NULLを使用する場合、親を持つすべてのノードを取得します。
親がない(またはフィールド「field_parent」がない)すべてのノードを選択するにはどうすればよいですか?
Cliveのおかげで、私は次の方法でこれを解決することができました。
$query = new EntityFieldQuery();
$children = $query
->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'page')
->propertyCondition('status', 1)
->addTag('filter_no_parent')
->execute();
/**
* Implements hook_query_TAG_alter()
*/
function mymodule_query_filter_no_parent_alter(QueryAlterableInterface $query) {
$query->leftJoin('field_data_field_parent', 'p', 'node.nid = p.entity_id');
$query->isNull('p.field_parent_target_id');
}
あなたは(生まれつき)私は恐れることはできません。 EntityFieldQuery
はIS NULL
またはIS NOT NULL
をサポートしていません。
ただし、回避策はありますが、基本的にはクエリにタグを追加し、必要なLEFT JOIN
およびIS NULL
ステートメントを追加するクエリ変更フックを実装します。
コード例については、 EntityFieldQueryはisNullまたはisNotNullをサポートしない を参照してください。以前にそのコードを使用したことがあり、良い結果が得られました。