Skip to content

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

Closed
@ezimuel

Description

@ezimuel

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions