Me gustaría ejecutar una consulta con el objeto EntityFieldQuery. Necesito valor de la tabla node y node_access, por lo tanto, necesito usar INNER JOIN. De la documentación do no puedo entender cómo es esto posible.
Esto es lo que tengo:
$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');
Respuestas:
No puede agregar uniones adicionales a un
EntityFieldQuery
directamente (no es compatible), pero podría agregar una etiqueta a la consulta, implementarhook_query_TAG_alter()
y agregar la unión manualmente cuando la consulta se convierte en una consulta db estándar.Esto no se ha probado, pero probablemente lo llevará a la mayor parte del camino:
Y luego la función de consulta alter:
La otra forma de hacerlo sería subclasificar
EntityFieldQuery
y agregar la unión, pero creo que el método anterior es más simple en este caso.fuente
EntityFieldQuery
db_select
, entonces puedes tener tanto control como quieras sobre ellaEntityFieldQuery
no almacena en caché, simplemente envuelveSelectQuery
y agrega algunos métodos para las entidades. Esos métodos adicionales explican la disminución leve (muy leve) del rendimiento que experimentaría al usarlo en lugar de un uso regularSelectQuery
Si está utilizando propiedades personalizadas con sus propias tablas, el método de etiqueta no funcionará. Necesita usar subconsultas en su lugar:
Consulte ¿ Necesita unirse a una EntityFieldQuery, qué tal una subconsulta? para detalles.
fuente