AFAIK tidak ada fungsi seperti itu, ketik kelas dan pilih konten klausa yang tidak pernah disentuh.
Jika Anda ingin menerapkan ini ke semua temuan, misalnya, Anda dapat menggunakan Model.beforeFind()
acara, lintasi select
klausa dan mengubah bidang menjadi ekspresi. Berikut adalah contoh cepat dan kotor, di mana field
adalah nama dari POLYGON
ketik 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']
);
}
Anda mungkin harus menghitung $field
sebagai ekspresi juga, jika bidang mungkin digunakan dalam satu dan perlu dikonversi di sana juga.
Cara lain adalah dengan mengonversi data pada level PHP di kelas tipe ' toPHP()
metode, seperti yang telah ditunjukkan dalam contoh kode Anda.
Lihat juga
- Buku Masak> Akses Basis Data &ORM> Objek Tabel> Callback Siklus Hidup> sebelumTemukan
- API> \Cake\Database\ Kueri::traverse()