AFAIK ऐसी कोई कार्यक्षमता नहीं है, कक्षाएं टाइप करें और क्लॉज सामग्री का चयन करें कभी स्पर्श न करें।
यदि आप इसे सभी खोजों पर लागू करना चाहते हैं, तो आप उदाहरण के लिए 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
. का हिसाब देना पड़ सकता है अभिव्यक्ति के रूप में भी, यदि फ़ील्ड का उपयोग एक में किया जा सकता है और उसे वहां भी परिवर्तित करने की आवश्यकता है।
दूसरा तरीका यह होगा कि पीएचपी स्तर पर डेटा को टाइप क्लास 'toPHP()
. में कनवर्ट किया जाए विधि, जैसा कि आपके कोड उदाहरण में पहले ही इंगित किया गया है।
यह भी देखें
- कुकबुक> डेटाबेस एक्सेस और ORM> टेबल ऑब्जेक्ट> जीवनचक्र कॉलबैक> पहले ढूंढें
- API> \Kake\Database\ क्वेरी ::ट्रैवर्स ()