मुझे ज़ेंड-सेलेक्ट का उपयोग करके कुछ सिंटैक्स परेशानी है,

मुझे एक खोज फ़ॉर्म से फ़ील्ड और मान मिलते हैं, मैं एक सरणी का उपयोग कर रहा हूं जो इस तरह के उदाहरण के लिए सामने आती है (यहां सब कुछ मेरे मॉडल से बाहर है):

 shot

इस तथ्य के कारण कि सरणी-पैरामीटर (vorname और nachname (mandant पूर्णांक होगा)) टाइप स्ट्रिंग हैं, मैं अपने चयन में वाइल्डकार्ड का उपयोग करना चाहता हूं, यदि फ़ील्ड vorname या/और nachname उपयोगकर्ता द्वारा भरे जाते हैं।

मैंने इसे ठीक से लिखने का तरीका सीखने की कोशिश की, जो काम करता है:

$select->where(['nachname LIKE ?'=>'%idt%']); 
$select->where(['vorname LIKE ?'=>'%tan%']); 

मेरे चयन में उपयोग करने के लिए स्ट्रिंग को सही करने के लिए, मैं इसे काफी असुविधाजनक उपयोग करता हूं और एक त्रुटि के साथ आने के अलावा, कोड:

foreach ($suche as $key=>$val) {
    if (($key=="vorname") && (strlen($suche['vorname'])>0)){
        $kritvn = "['" . $key . " LIKE " . chr(63) . " => '%" . $val . "%']";
    }
    if (($key=='nachname') && (strlen($suche['nachname'])>0)){
        $kritnn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";
    }
}

पहले एक में, मैंने "?" के सिंटैक्स के साथ थोड़ा सा खेला, अगर मैं अगले एक का उपयोग करता हूं, तो मुझे निम्न त्रुटि मिलती है;

$kritvn = "['" . $key . " LIKE ?'=>'%" . $val ."%']";

'['vorname LIKE' => '%% tan%%'] के पास उपयोग करने के लिए सही सिंटैक्स के लिए)

मैंने फ़ंक्शन chr() के साथ प्रयास किया और \? से पहले, वही समस्या "%" के साथ होगी।

तो अंत में मेरे पास वास्तव में दो प्रश्न हैं:

परिणाम तक पहुंचने के लिए उचित तकनीक क्या होगी?

यदि कोई बेहतर समाधान नहीं है, जो मुझे नहीं लगता, तो मुझे इसे ठीक से कैसे लिखना चाहिए?

अगर $key = 'vorname' और मान शायद तन है, तो मैं एक ऐसी स्थिति की सराहना करता हूं जो इस तरह दिखती है:

 $select->where(['vorname LIKE ?'=>'%tan%']); 

और शायद, कोई बेहतर तरीका नहीं है, समस्या हुई क्योंकि अब मुझे वाइल्डकार्ड चाहिए ;-)

0
pia-sophie 17 मार्च 2020, 13:31

1 उत्तर

सबसे बढ़िया उत्तर

select->where() ज़ेंड का उपयोग करते समय आप जिस सरणी को भेज सकते हैं, वह उसे बराबर के साथ एक कथन में बदल देगा

उदाहरण के लिए

$select->where(['vorname LIKE ?'=>'%tan%']); 

बन जाता है

WHERE `vorname LIKE ?` = "%tan%"

इसका उपयोग करने के लिए जैसे आपको इस तरह की वस्तुओं के तरीकों का उपयोग करना होगा

$where = new \Zend\Db\Sql\Where();
$where->like("vorname", "%tan%");
$select->where($where);

या आप इस तरह सॉर्टर संस्करण का उपयोग कर सकते हैं जहां ज़ेंड आपके लिए ऑब्जेक्ट बनाता है।

 $select->where->like("vorname", "%tan%");
2
Otto Sandström 26 मार्च 2020, 15:54