Je recherche l'ID de l'entité de type A et je connais l'ID de l'entité B qui fait référence à A.
J'ai trouvé quelques belles sources sur EntityFieldQuery. J'ai été étonné que j'obtienne des résultats de .NET dans google :) (est-ce un signe de maturité de Drupal? :). Mais n'a pas réussi à trouver cela. Veuillez aider ...
Quelques sources:
Voici à quoi cela ressemble avec des charges d'entité - vous comprendrez que j'ai besoin de cette requête :) Le wrapper est là pour la pratique principalement. Notez qu'il charge l'entité cible - beaucoup de requêtes.
$b = entity_load('B', array($id));
$bm = entity_metadata_wrapper('B', $sl[$id]);
$tsl = $slm->field_sl_tpref->value();
echo $tsl->id;
EntityFieldQuery
ne peut référencer qu'un ensemble d'entités, il ne peut malheureusement pas créer de relations avec d'autres entités. Il ne peut également renvoyer qu'un seul type d'entité à la fois, même si vous pouviez créer ces relations, les résultats ne seraient pas fiables.Réponses:
Vous pouvez utiliser
target_id
au lieu devalue
pour récupérer des entités en fonction de l'ID des entités référencées:la source
euh, le module de relation est-il ce que vous recherchez? On dirait que définir les relations entre les entités X et Y est ce que vous voulez faire. il a ses propres RelationQuery (un wrapper autour d'EFQ) et RelationQueryEndpoints pour obtenir facilement ce type d'informations.
la source
Je sais que c'est une question plus ancienne, mais pour les gens qui y arrivent de Google, j'ai pensé que je lancerais une autre approche ici.
D'après la description ci-dessus, la configuration a 2 types d'entités, A et B. B référence A avec la référence d'entité que je suppose. Donc, si vous avez l'ID de B, vous devriez avoir un champ avec l'ID de A stocké dans la base de données.
Notes de code:
$original_node->nid
Ce serait l'ID de B$type
il doit s'agir du type ACode
Vous pouvez également configurer des références d'entité bidirectionnelles et effectuer la même requête ci-dessus à l'envers. Vous pouvez utiliser un module comme CER pour vous assurer que ces références sont mises à jour. Ou définissez une règle pour maintenir la référence à jour, j'ai utilisé les deux.
la source
fieldCondition('field_NAME_OF_FIELD', 'target_id', $original_node->nid, '=')
fonctionnera-t-il? devrait-il être changé enfieldCondition('field_NAME_OF_FIELD', 'target_id', array($original_node->nid), 'IN')
. Impossible de trouver quoi que ce soit sur la façon d'appliquer la condition sur le champ de référence d'entité à valeurs multiples. toute suggestion?une solution assez dynamique (un peu sale aussi mais j'en avais besoin rapidement) donc vous n'avez pas besoin de coder en dur le nom du champ de référencement et il est automatiquement géré avec un nouveau champ de référencement que vous ajouterez à l'avenir:
dans votre module personnalisé:
où vous devez obtenir les nœuds parents étant donné le nœud enfant:
la source