I’ve been working with the entityQuery
to query the db and get an array of filtered nids
however I need to add an expression to my query.
I’ve checked the Query
class and found a protected sqlQuery
attribute that has access to addExpression()
. In my case I’m not extending the class but rather instantiating it through Drupal::entityQuery('node')
.
Also after checking a bit I found that the Select
class has a function addExpression() that does exactly what I need, but then I lose the entityQuery
and has to addJoin/addField and so on for each of the fields I would like to include in my conditions.
My objective:
$expression = " ( 6371000 * acos( cos( radians({$latitude}) ) * cos( radians( {$latitudeField} ) ) * cos( radians( {$longitudeField} ) - radians({$longitude}) ) + sin( radians({$latitude}) ) * sin( radians( {$latitudeField} ) ) ) )"; $query = Drupal::entityQuery('node') ->condition('status', 1) ->condition(`field_city`,1,'=') ->addExpression($expression, 'distance'); $nids = $query->execute();
Did I miss something ? Is there any other way to achieve what I want ?
EDIT: I found this approach but doesn’t seem straight forward
EDIT2: Better approach is this