AFAIK no existe tal funcionalidad, las clases de tipo y el contenido de la cláusula de selección nunca se tocan.
Si quisiera aplicar esto a todos los hallazgos, podría, por ejemplo, usar Model.beforeFind() evento, atraviesa el select cláusula y transformar los campos en expresiones. Aquí hay un ejemplo rápido y sucio, donde field es el nombre del POLYGON tipo de columna:
// in the respective table class
use Cake\Event\Event;
use Cake\ORM\Query;
// ...
public function beforeFind(Event $event, Query $query, \ArrayObject $options, $primary)
{
$query->traverse(
function (&$value) use ($query) {
if (empty($value)) {
$value = $query->aliasFields($this->getSchema()->columns());
}
foreach ($value as $key => $field) {
if (is_string($field) &&
$this->aliasField($field) === $this->aliasField('field')
) {
unset($value[$key]);
$value[key($query->aliasField($field))] = $query->func()->AsText([
$this->aliasField('field') => 'identifier'
]);
}
}
},
['select']
);
}
Es posible que deba dar cuenta de $field como expresiones también, en caso de que el campo se pueda usar en uno y deba convertirse allí también.
Otra forma sería convertir los datos en el nivel de PHP en la clase de tipo 'toPHP() método, como ya se indicó en su ejemplo de código.
Véase también
- Recetario> Acceso a bases de datos y ORM> Objetos de tabla> Devoluciones de llamada del ciclo de vida> beforeFind
- API> \Cake\Database\ Consulta::atravesar()