AFAIK det finns ingen sådan funktionalitet, typklasser och välj klausulinnehåll rör aldrig.
Om du vill tillämpa detta på alla fynd, kan du till exempel använda Model.beforeFind() händelse, gå igenom select sats och omvandla fälten till uttryck. Här är ett snabbt och smutsigt exempel, där field är namnet på POLYGON typ kolumn:
// 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 kanske måste ta hänsyn till $field som uttryck också, om fältet kan användas i ett och måste konverteras även där.
Ett annat sätt skulle vara att konvertera data på PHP-nivå i typklassen toPHP() metod, som redan anges i ditt kodexempel.
Se även
- Kokbok> Databasåtkomst och ORM> Tabellobjekt> Livscykelåterrop> föreFind
- API> \Cake\Database\ Fråga::traverse()