AFAIK non esiste tale funzionalità, digitare classi e selezionare i contenuti della clausola non si toccano mai.
Se desideri applicarlo a tutti i risultati, puoi ad esempio utilizzare Model.beforeFind()
evento, attraversa il select
clausola e trasformare i campi in espressioni. Ecco un esempio veloce e sporco, dove field
è il nome del POLYGON
tipo colonna:
// 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']
);
}
Potrebbe essere necessario tenere conto di $field
anche come espressioni, nel caso in cui il campo possa essere utilizzato in uno e debba essere convertito anche lì.
Un altro modo sarebbe convertire i dati a livello PHP nella classe di tipo toPHP()
metodo, come già indicato nel tuo esempio di codice.
Vedi anche
- Ricettario> Accesso al database e ORM> Oggetti tabella> Richiamate del ciclo di vita> beforeFind
- API> \Cake\Database\ Interroga::traverse()