web-dev-qa-db-ja.com

EntityFieldQuery fieldCondition

私は次のコードを持っています:

_$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 | 
 + ------------- + --------------- + --------- +- --------- + ------------- + ---------- + ------- + ------- -------------- + 

このクエリを正しく実行するにはどうすればよいですか?

3
Pete171

私はこれを別の方法で解決することができました。

フィールドコレクションが接続されているノードから情報を取得するために、エンティティIDを取得しようとしました。ただし、代わりに、関連するノードをロードするためにnode_load()を使用しました。次に、フィールドコレクションオブジェクトのエンティティIDを取得し、entity_load()を使用してそれをロードすることができました。

1
Pete171

_entity_id_は、フィールドが関連付けられているエンティティのエンティティIDです。この場合、フィールドコレクションアイテムのID。それに条件を追加するには、「field_collection_item」主キーでpropertyCondition()を使用する必要があります。

2
Berdir

これにまだ興味がある人は、次の方法で実行できます。

->entityCondition('entity_id', '68', '!=')

1
Guardian