AFAIK žádná taková funkce neexistuje, typové třídy a výběrové klauzule se nikdy nedotýkají.
Pokud byste to chtěli použít na všechny nálezy, můžete například použít Model.beforeFind()
událost, projděte select
klauzule a transformovat pole na výrazy. Zde je rychlý a špinavý příklad, kde field
je název POLYGON
sloupec typu:
// 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']
);
}
Možná budete muset zaúčtovat $field
také jako výrazy, pro případ, že by pole mohlo být použito v jednom a tam je také potřeba převést.
Dalším způsobem by bylo převést data na úrovni PHP v typové třídě' toPHP()
jak již bylo uvedeno v příkladu kódu.
Viz také
- Kuchařka> Přístup k databázi a ORM> Objekty tabulky> Zpětná volání životního cyklu> beforeFind
- API> \Cake\Database\ Dotaz::traverse()