AFAIK não existe tal funcionalidade, classes de tipo e conteúdo de cláusulas de seleção nunca tocam.
Se você quiser aplicar isso a todas as descobertas, poderá, por exemplo, usar o
Model.beforeFind() evento, percorra o select cláusula e transformar os campos em expressões. Aqui está um exemplo rápido e sujo, onde field é o nome do POLYGON coluna tipo:// 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']
);
}
Você pode ter que contabilizar
$field como expressões também, caso o campo possa ser usado em um e precise ser convertido lá também. Outra maneira seria converter os dados no nível do PHP na classe de tipo
toPHP() método, como já indicado em seu exemplo de código. Veja também
- Livro de receitas> Acesso a banco de dados e ORM> Objetos de tabela> Callbacks do ciclo de vida> beforeFind
- API> \Cake\Database\ Consulta::travessia()