elastic / elasticsearch-php

Official PHP client for Elasticsearch.
https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html
MIT License
5.25k stars 963 forks source link

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

Closed ezimuel closed 3 months ago

ezimuel commented 3 months ago

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 commented 3 months ago

Done in #1399