it-swarm.com.de

Ruft Felder aus einer von EntityFieldQuery zurückgegebenen Entität ab

Ich habe einen Videoinhaltstyp. Ich führe die folgende Abfrage in hook_cron Aus:

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node');
$query->entityCondition('bundle', 'video');
$query->propertyCondition('status', 1);
$results = $query->execute();

Dies gibt die Anzahl der Entitätsobjekte mit den Eigenschaften nid, vid und type zurück. Ich möchte dieses Objekt verwenden, um einen Wert für ein bestimmtes Feld des Videos zu finden (z. B. Dauer). Ich möchte node_load Nicht verwenden, da ich das zuerst getan hätte, anstatt die Abfrage zu verwenden. Wie kann das gemacht werden?

7
AjitS

Das Modul EntityFieldQuery Extra Fields könnte Ihr Problem lösen.

Die Abfrage gibt, wie unten gezeigt, ein Objekt zurück, das die Entitäts-ID, den Entitätstyp und ein Objekt enthält, das den Entitätstyp, die Entitäts-ID, die Revisions-ID, das Bundle und das angeforderte Feld enthält. Ihr Code wäre:

$query = new EntityFieldQueryExtraFields();

$query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'video')
  ->addExtraField('field_duration', 'value', 'value')
  ->propertyCondition('status', 1);

$results = $query->execute();

Ich verwende diese Lösung derzeit auf einer Website.

5
SpartyDan

Es kann nicht - ein EntityFieldQuery lädt immer nur die Entitäts-ID und die Bundle-Schlüssel.

Sie haben keine andere Wahl, als node_load_multiple() zu verwenden (oder das Äquivalent, wenn Sie einen anderen Entitätstyp verwenden).

$nodes = node_load_multiple(array_keys($results['node']));

Beachten Sie, dass der Parameter $conditions Von node_load_multiple() veraltet ist. zugunsten von EntityFieldQuery, wie ich es verstehe.

Sie könnten theoretisch die Unterklasse EntityFieldQuery unterteilen und die Methode execute() überschreiben, um die vollständig geladenen Entitäten zurückzugeben. Sie müssen die Klasse jedoch auch erweitern, damit sie immer weiß, nach welchem ​​Entitätstyp sie abfragt. Andernfalls wird nicht bekannt, welcher Schlüssel in $results verwendet werden soll.

11
Clive