elasticsearch-php icon indicating copy to clipboard operation
elasticsearch-php copied to clipboard

[Proposal] Add a mapTo(class) function for map ES|QL response into objects

Open ezimuel opened this issue 1 year ago • 0 comments

This is a proposal for adding a Response\Elasticsearch::mapTo($class = 'stdClass') for mapping an ES|QL response into an object of a class $class.

Here an example:

class Employee
{
    public string $name;
    public DateTime $birthdate;
    public float $avg_salary;
    public string $country;
}

$client = ClientBuilder::create()
    ->build();

$result = $client->esql()->query([
    'body' => [
        'query' => 'FROM employees | STATS avg_salary = AVG(salary) by country'
    ]
]);
$employees = $result->mapTo(Employee::class); // array of Employee

printf("Number of employees: %d\n", count($employees));
printf("First employee\n");
printf("Name: %s\n", $employees[0]->name);
printf("Birthdate: %s\n",  $employees[0]->birthday->format('Y-m-d'));
printf("Avg salary: %.2f\n", $employees[0]->avg_salary);
printf("Country: %s\n", $employees[0]->country);

If $class is not specified the default class is stdClass.

ezimuel avatar Mar 25 '24 13:03 ezimuel