Ich suche nach der ID der Entität vom Typ A und kenne die ID der Entität B, die auf A verweist.
Ich habe ein paar nette Quellen über EntityFieldQuery gefunden. Ich war erstaunt, dass ich in Google Ergebnisse von .NET erhalten habe :) (ist das ein Zeichen für Drupals Reife? :). Aber ich habe es nicht geschafft, dies zu finden. Bitte helfen Sie ...
Einige der Quellen:
So sieht es beim Laden von Entitäten aus - Sie werden verstehen, dass ich diese Abfrage brauche :) Der Wrapper dient hauptsächlich zum Üben. Beachten Sie, dass die Zielentität geladen wird - ziemlich viele Abfragen.
$b = entity_load('B', array($id));
$bm = entity_metadata_wrapper('B', $sl[$id]);
$tsl = $slm->field_sl_tpref->value();
echo $tsl->id;
EntityFieldQuery
kann nur auf eine Gruppe von Entitäten verweisen, es können leider keine Beziehungen zu anderen Entitäten erstellt werden. Es kann auch das Rück nur eine Art von Einheit zu einer Zeit also , selbst wenn Sie diese Beziehungen der Ergebnisse wären unzuverlässig schaffen könnten.Antworten:
Sie können
target_id
anstelle von verwendenvalue
, um Entitäten basierend auf der ID der referenzierten Entitäten abzurufen:quelle
äh, ist das Beziehungsmodul das, wonach Sie suchen? Es klingt so, als ob Sie Beziehungen zwischen X- und Y-Entitäten definieren möchten. Es verfügt über eine eigene RelationQuery (ein Wrapper um EFQ) und RelationQueryEndpoints, um diese Art von Informationen einfach abzurufen.
quelle
Ich weiß, dass dies eine ältere Frage ist, aber für Leute, die von Google darauf zugreifen, dachte ich, ich würde hier einen anderen Ansatz einbringen.
Aus der obigen Beschreibung geht hervor, dass das Setup zwei Entitätstypen hat, A und B. B-Referenzen A mit Entitätsreferenz, die ich annehme. Wenn Sie also die ID von B haben, sollten Sie ein Feld mit der ID von A in der Datenbank speichern.
Code Hinweise:
$original_node->nid
Dies wäre die ID von B.$type
Dies sollte der Typ von A seinCode
Sie können auch bidirektionale Entitätsreferenzen einrichten und dieselbe Abfrage oben rückwärts ausführen. Sie können ein Modul wie CER verwenden , um sicherzustellen, dass diese Referenzen auf dem neuesten Stand sind. Oder richten Sie eine Regel ein, um die Referenz auf dem neuesten Stand zu halten. Ich habe beide verwendet.
quelle
fieldCondition('field_NAME_OF_FIELD', 'target_id', $original_node->nid, '=')
funktioniert das? sollte es geändert werden zufieldCondition('field_NAME_OF_FIELD', 'target_id', array($original_node->nid), 'IN')
. Es konnte nichts darüber gefunden werden, wie eine Bedingung auf ein mehrwertiges Entitätsreferenzfeld angewendet wird. irgendein Vorschlag?Eine ziemlich dynamische Lösung (auch ein bisschen schmutzig, aber ich brauchte sie schnell), sodass Sie den Namen des Referenzierungsfelds nicht fest codieren müssen und sie automatisch mit einem neuen Referenzierungsfeld behandelt wird, das Sie in Zukunft hinzufügen werden:
in Ihrem benutzerdefinierten Modul:
Wo müssen Sie die übergeordneten Knoten erhalten, wenn der untergeordnete Knoten angegeben ist:
quelle