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