AFAIK der er ingen sådan funktionalitet, skriv klasser og udvalgte klausuler rører aldrig.
Hvis du ville anvende dette på alle fund, så kunne du f.eks. bruge Model.beforeFind() hændelse, skal du krydse select klausul og transformer felterne til udtryk. Her er et hurtigt og beskidt eksempel, hvor field er navnet på POLYGON type kolonne:
// 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']
);
}
Du skal muligvis tage højde for $field også som udtryk, hvis feltet kan bruges i et og også skal konverteres der.
En anden måde ville være at konvertere dataene på PHP-niveau i typeklassen' toPHP() metode, som allerede angivet i dit kodeeksempel.
Se også
- Kogebog> Databaseadgang og ORM> Tabelobjekter> Livscyklustilbagekald> førFind
- API> \Cake\Database\ Forespørgsel::traverse()