web-dev-qa-db-ja.com

entityfieldqueryを使用して後で追加された存在しないフィールドを確認する方法

後でジョブタイプノードに必須フィールドを追加しました。そのため、既存のノードにはその特定のフィールド値はありません。このようなフィールド値をすべて含めたいと思います。しかし、どうすればよいですか?

これはクエリのサンプルです:

$query->entityCondition('entity_type', 'node')
    ->entityCondition('bundle', array('central_government_vacancy','psu_vacancy','state_government_vacancy'))
    ->propertyCondition('status', 1)
    -> fieldCondition('field__expired_processed', 'value', 'NULL', '=')  //I'm looking for this field
    ->fieldCondition('field_last_date_of_application', 'value', $date, '<=');

上記のコードで、フィールド値が初期化されていないノードを見つけたいと考えています:field_expired_processed。

!=、または比較にNULLを使用しても機能しないようです。

2
AgA

fieldCondition のドキュメントページを見ると、次の警告が表示されます。

このメソッドを使用すると、空のフィールド値を持つエンティティはEntityFieldQueryの結果から除外されることに注意してください。

Drupal 8でentityFieldQueryにフィールドが存在するかどうかを確認していますが、残念ながら Drupal 7)にバックポートされません =。

つまり、これを実現するには、標準の SelectQuery を使用する必要があります。データを含むテーブルを結合し、フィールドがIS NULLであるかどうかを確認する必要があります。次のようになります。

$q = db_select('node', 'n');
$q->condition('n.type', 'central_government_vacancy', '=')
->addJoin('LEFT', 'field_data_field_expired_processed', 'f')
->isNull('f.value');
$r = $q->execute();
2
Alice Heaton