in src/Response/Elasticsearch.php [260:308]
public function mapTo(string $class = stdClass::class): array
{
$response = $this->asArray();
if (!isset($response['columns']) || !isset($response['values'])) {
throw new UnknownContentTypeException(sprintf(
"The response is not a valid ES|QL result. I cannot mapTo(\"%s\")",
$class
));
}
$iterator = [];
$ncol = count($response['columns']);
foreach ($response['values'] as $value) {
$obj = new $class;
for ($i=0; $i < $ncol; $i++) {
$field = Utility::formatVariableName($response['columns'][$i]['name']);
if ($class !== stdClass::class && !property_exists($obj, $field)) {
continue;
}
switch($response['columns'][$i]['type']) {
case 'boolean':
$obj->{$field} = (bool) $value[$i];
break;
case 'date':
$obj->{$field} = new DateTime($value[$i]);
break;
case 'alias':
case 'text':
case 'keyword':
case 'ip':
$obj->{$field} = (string) $value[$i];
break;
case 'integer':
$obj->{$field} = (int) $value[$i];
break;
case 'long':
case 'double':
$obj->{$field} = (float) $value[$i];
break;
case 'null':
$obj->{$field} = null;
break;
default:
$obj->{$field} = $value[$i];
}
}
$iterator[] = $obj;
}
return $iterator;
}