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()