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