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