AFAIK er is geen dergelijke functionaliteit, typeklassen en selecteer de inhoud van de clausule raken nooit aan.
Als u dit op alle vondsten wilt toepassen, kunt u bijvoorbeeld de Model.beforeFind()
gebruiken gebeurtenis, doorloopt u de select
clausule en zet de velden om in expressies. Hier is een snel en vies voorbeeld, waar field
is de naam van de POLYGON
type kolom:
// 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']
);
}
Mogelijk moet u rekening houden met $field
ook als uitdrukkingen, voor het geval het veld in een veld gebruikt kan worden en daar ook moet worden geconverteerd.
Een andere manier is om de gegevens op PHP-niveau om te zetten in de typeklasse' toPHP()
methode, zoals al aangegeven in uw codevoorbeeld.
Zie ook
- Kookboek> Databasetoegang en ORM> Tabelobjecten> Lifecycle-callbacks> beforeFind
- API> \Cake\Database\ Zoekopdracht::traverse()