Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

केकपीएचपी मॉडल बीच तिथियों के साथ

अगर मैं आपका सही तरीके से अनुसरण कर रहा हूँ:

  • प्रयोक्ता को प्रपत्र से उत्पन्न प्रश्नों को खोजने के लिए प्रारंभ/समाप्ति तिथियां निर्दिष्ट करनी होंगी
  • आपको इन तिथियों को सत्यापित करने की आवश्यकता है ताकि, उदाहरण के लिए:
    • आरंभ तिथि के बाद समाप्ति तिथि
    • समाप्ति तिथि प्रारंभ तिथि से सदियों दूर नहीं है
  • आप चाहते हैं कि सत्यापन त्रुटियां फ़ॉर्म के भीतर इनलाइन दिखाई दें (भले ही यह एक सेव न हो)

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

$this->Model->find('all', array(
    'conditions' => array(/* normal conditions here */),
    'dateRange' => array(
        'start' => /* start_date value */,
        'end'   => /* end_date value */,
    ),
));

उम्मीद है कि आपको beforeFind . में बाकी सब कुछ संभालने में सक्षम होना चाहिए फ़िल्टर:

public function beforeFind() {
    // perform query validation
    if ($queryData['dateRange']['end'] < $queryData['dateRange']['start']) {
        $this->invalidate(
            /* end_date field name */,
            "End date must be after start date"
        );
        return false;
    }
    /* repeat for other validation */
    // add between condition to query
    $queryData['conditions'][] = array(
        'Model.dateField BETWEEN ? AND ?' => array(
            $queryData['dateRange']['start'],
            $queryData['dateRange']['end'],
        ),
    );
    unset($queryData['dateRange']);
    // proceed with find
    return true;
}

मैंने Model::invalidate() . का उपयोग करने का प्रयास नहीं किया है खोज ऑपरेशन के दौरान, इसलिए यह काम भी नहीं कर सकता है। विचार यह है कि यदि प्रपत्र FormHelper . का उपयोग करके बनाया गया है इन संदेशों को इसे फ़ॉर्म फ़ील्ड के बगल में वापस बनाना चाहिए।

ऐसा न होने पर, आपको नियंत्रक में यह सत्यापन करने और Session::setFlash() का उपयोग करने की आवश्यकता हो सकती है . अगर ऐसा है, तो आप beforeFind . से भी छुटकारा पा सकते हैं और BETWEEN डालें आपकी अन्य शर्तों के साथ कंडीशन ऐरे।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्तमान तिथि के अनुसार डेटा छँटाई

  2. प्वाइंट का उपयोग कर मैसकल स्थानिक दूरी - काम नहीं कर रहा

  3. नौकरी के लिए सबसे अच्छा डीबीएमएस क्या है?

  4. लार्वेल में केवल आज ही बनाए गए रिकॉर्ड प्राप्त करें

  5. MySQL 5.5 के साथ RMySQL स्थापना समस्या