cakephp / elastic-search

Elastic search datasource for CakePHP
Other
88 stars 53 forks source link

[2.x] Date fields aren't converted to object #234

Closed CauanCabral closed 4 years ago

CauanCabral commented 4 years ago

When searching on tables, we have automatically conversions from database types to PHP equivalents, but on indexes, they seen always text type.

As Index can have Mapping definition, including text, boolean, numeric, timestamp, how can I teach Index / Document to convert these types to PHP equivalents?

markstory commented 4 years ago

As Index can have Mapping definition, including text, boolean, numeric, timestamp, how can I teach Index / Document to convert these types to PHP equivalents?

The ORM does this by introspecting the SQL schema and then using the Type classes to cast results as they are read from the statement objects. An analogous system for elasticsearch could be added to ResultSet::current() to cast data based on the document schema.

CauanCabral commented 4 years ago

Great.

I'm trying figure how exactly that works:

  1. ORM\ResultSet::current() only returns value from _current property
  2. ORM\ResultSet::_calculateColumnMap($query) seems the start point
  3. Database\Query::addDefaultTypes is called from __construct and, I think, is where I need to work

Did I miss something?

markstory commented 4 years ago

I was referring to the ResultSet in this plugin. The methods you outlined are part of how the types are collected in the ORM. The casting happens inside of FieldTypeConverter which is used as a statement decorator by Cake\Database\Query::_decorateStatement()

CauanCabral commented 4 years ago

@markstory I did a prototype based on 2.x branch (my env have Cake 3.x + elasticsearch 6.x).

Tried to be simple as possible, so, I included a Dummy driver who do nothing, justo to pass as a Type::toPHP parameter. For my current env/data, worked fine.

Thinking how to tests that before opening a PR.

Any chance to apply this on both Cake\ElasticSearch active branch (3.x and 2.x)?

github-actions[bot] commented 4 years ago

This issue is stale because it has been open for 120 days with no activity. Remove the stale label or comment or this will be closed in 15 days

CauanCabral commented 4 years ago

I hadn't time to finish the PR yet, but I will.