Je voudrais exécuter une requête à l'aide de l'objet EntityFieldQuery. J'ai besoin de valeur à la fois du nœud et de la table node_access, donc j'aurais besoin d'utiliser INNER JOIN. À partir de la documentation do, je ne peux pas comprendre comment cela est possible.
Voici ce que j'ai -
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'node')
->entityCondition('bundle', 'node_access')
->propertyCondition('type', 'external_link')
->propertyCondition('status', 1)
->fieldCondition('gid', '3', '=')
->fieldCondition('realm', 'domain_id', '=')
->fieldCondition('grant_view', '1', '>=')
->range(0,1)
->execute();
->fieldCondition('field_name', 'target_id', $entities_a, 'IN');
Réponses:
Vous ne pouvez pas ajouter de jointures supplémentaires à un
EntityFieldQuery
directement (ce n'est pas pris en charge), mais vous pouvez ajouter une balise à la requête, implémenterhook_query_TAG_alter()
et ajouter la jointure manuellement lorsque la requête est convertie en une requête db standard.Ce n'est pas testé, mais vous obtiendrez probablement la plupart du chemin:
Et puis la fonction alter alter:
L'autre façon de le faire serait de se sous
EntityFieldQuery
- classer et d'ajouter la jointure, mais je pense que la méthode ci-dessus est plus simple dans ce cas.la source
EntityFieldQuery
db_select
, alors vous pouvez avoir autant de contrôle que vous le souhaitezEntityFieldQuery
ne fait aucune mise en cache, il s'enroule simplement autour de aSelectQuery
et ajoute quelques méthodes pour les entités. Ces méthodes supplémentaires expliquent la légère (très légère) diminution des performances que vous ressentiriez en l'utilisant par opposition à une régulièreSelectQuery
Si vous utilisez des propriétés personnalisées avec vos propres tables, la méthode des balises ne fonctionnera pas. Vous devez utiliser des sous-requêtes à la place:
Voir Besoin d'une jointure dans une EntityFieldQuery, que diriez-vous d'une sous-requête? pour plus de détails.
la source