AFAIK gibt es keine solche Funktionalität, Typklassen und ausgewählte Klauselinhalte berühren sich nie.
Wenn Sie dies auf alle Funde anwenden möchten, können Sie beispielsweise Model.beforeFind()
verwenden Ereignis, durchlaufen Sie das select
-Klausel und wandeln die Felder in Ausdrücke um. Hier ist ein schnelles und schmutziges Beispiel, bei dem field
ist der Name des POLYGON
Geben Sie Spalte ein:
// 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']
);
}
Möglicherweise müssen Sie $field
berücksichtigen auch als Ausdrücke, falls das Feld eventuell in einem verwendet wird und dort auch konvertiert werden muss.
Eine andere Möglichkeit wäre, die Daten auf PHP-Ebene in der Typklasse toPHP()
zu konvertieren Methode, wie bereits in Ihrem Codebeispiel angegeben.
Siehe auch
- Cookbook> Database Access &ORM> Tabellenobjekte> Lebenszyklus-Callbacks> beforeFind
- API> \Cake\Database\ Abfrage::traverse()