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