私は次のコードを持っています:
_$query = new EntityFieldQuery();
$result = $query
->entityCondition('entity_type', 'field_collection_item', '=')
->propertyCondition('field_name', 'field_version', '=')
->fieldCondition('field_version', 'entity_id', '105', '=')
->execute()
;
_
最初の2つの条件は問題ありませんが、fieldCondition()が次のSQL例外を引き起こしています。
PDOException:SQLSTATE [42S22]:列が見つかりません:1054不明な列 'field_data_field_version0.field_version_entity_id' in 'where clause' ...
問題は、 'field_version'が列 'entity_id'の前に付加されているようです。私は_field_sql_storage_query_field_conditions()
を調べましたが、これを前に付けるのを止める方法はないようです。これは私がfieldConditionを実行しようとしているテーブルです:
+ ------------- + --------------- + --------- + ---- ------- + ------------- + ---------- + ------- + --------- ------------ + | entity_type |バンドル|削除済み| entity_id | revision_id |言語|デルタ| field_version_value | + ------------- + --------------- + --------- + ---- ------- + ------------- + ---------- + ------- + --------- ------------ + |ノード| shopping_cart | 0 | 105 | 123 | und | 0 | 5 | |ノード| shopping_cart | 0 | 108 | 126 | und | 0 | 8 | + ------------- + --------------- + --------- +- --------- + ------------- + ---------- + ------- + ------- -------------- +
このクエリを正しく実行するにはどうすればよいですか?
私はこれを別の方法で解決することができました。
フィールドコレクションが接続されているノードから情報を取得するために、エンティティIDを取得しようとしました。ただし、代わりに、関連するノードをロードするためにnode_load()
を使用しました。次に、フィールドコレクションオブジェクトのエンティティIDを取得し、entity_load()
を使用してそれをロードすることができました。
_entity_id
_は、フィールドが関連付けられているエンティティのエンティティIDです。この場合、フィールドコレクションアイテムのID。それに条件を追加するには、「field_collection_item」主キーでpropertyCondition()
を使用する必要があります。
これにまだ興味がある人は、次の方法で実行できます。
->entityCondition('entity_id', '68', '!=')