AFAIKにはそのような機能はなく、型クラスとselect句の内容は決して触れません。
これをすべての検索に適用する場合は、たとえばModel.beforeFind()
を使用できます。 イベント、select
をトラバースします 句を使用して、フィールドを式に変換します。これは、field
の簡単で汚い例です。 POLYGON
の名前です タイプ列:
// 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']
);
}
$field
を考慮する必要がある場合があります 式としても、フィールドが1つで使用され、そこでも変換する必要がある場合に備えて。
もう1つの方法は、型クラス'toPHP()
のPHPレベルでデータを変換することです。 コード例ですでに示されているように、メソッド。
も参照してください
- クックブック>データベースアクセスとORM>テーブルオブジェクト>ライフサイクルコールバック>beforeFind
- API> \ Cake \ Database \ Query ::traverse()