नमस्कार

मेरे विचार में मेरे पास एक तिथि चयनकर्ता है जो start_date और end_date का चयन करता है। मेरी समस्या यह है कि मुझे चयनित तिथि सीमाओं के साथ सही डेटा नहीं मिल सकता है। मेरे पास एक नमूना छवि है जो आपको दिखाने के लिए कि मेरा क्या मतलब है।

नमूना डेटा:

enter image description here

अगर मैं start_date (2015-10-01) का चयन करता हूं तो end_date (2015-10-29), यह केवल इसे वापस करता है। यहां छवि विवरण दर्ज करें

इसके अलावा

enter image description here

मुझे केवल दो तिथियां मिलती हैं जो चयनित तिथि है और चयनित तिथि है .. बात यह है कि उम्मीदवार को 1, 2 और 3 वापस करना चाहिए क्योंकि उनकी तिथियां अंतिम सीमा के भीतर start_date (2015-10-01) के अंत तक हैं (2015- 10-29 )। मेरे कोड में क्या गलत है कृपया मदद करे। क्या कोई मेरे कोड की समीक्षा कर सकता है .. शायद मुझे कुछ याद है।

यह मेरा विचार है।

<form>
    <div class="form-group"><label>Date From</label>
        <?php 
            $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                'model' => $model,  
                'name' => 'start_date',
                'options'=>array(
                    'dateFormat'=>'yy-mm-dd', 
                ),
                'htmlOptions'=>array(
                    'class'=>'form-control',
                    'placeholder'=>'From',
                    'value' => $search_date_start,
                ),
            ));  
        ?> 
    </div> 

    <div class="form-group"><label>To</label>
        <div class="controls" style='margin-top: 5px;'>
            <?php 
            $end_date = date('m-d-Y');
                $this->widget('zii.widgets.jui.CJuiDatePicker', array(
                    'model' => $model,  
                    'name' => 'end_date',
                    'options'=>array(
                        'dateFormat'=>'yy-mm-dd',
                    ),
                    'htmlOptions'=>array(
                        'class'=>'form-control',
                        'placeholder'=>'To',
                        'value' => $search_date_end,
                    ),
                ));  
            ?>
        </div>
    </div>
  </div>

    <div class="form-group">
        <input type="submit" name='search_btn' value="Search" class='btn btn-primary '>
        <input type="submit" name='reset_btn' value="Reset" class='btn btn-default '> 
    </div>
</form>

मेरे नियंत्रक में, मैंने यह कोड जोड़ा है।

if(isset($_POST['search_btn'])) {

                if (isset($_POST['start_date']) && isset($_POST['end_date'])) {
                    $search_date_start = $_POST['start_date'];
                    $search_date_end = $_POST['end_date'];
                    Yii::app()->session['start_date_evaluation'] = $search_date_start;
                    Yii::app()->session['end_date_evaluation'] = $search_date_end;
                } 

                if (isset($_POST['search'])) {
                    $search = $_POST['search'];
                    Yii::app()->session['search_evaluation'] = $search;
                }
            }

मेरे मॉडल में मेरे पास यह कोड है।

public function search($candidate_id, $search_date_start, $search_date_end, $search) {
        // Warning: Please modify the following code to remove attributes that
        // should not be searched. 
        $criteria = new CDbCriteria;        
        $criteria->compare('id', $this->id);
        $criteria->compare('evaluation_form_id', $this->evaluation_form_id);
        $criteria->addSearchCondition('evaluatee', $search);
        $criteria->addSearchCondition('start_date', $search_date_start);
        $criteria->addSearchCondition('end_date', $search_date_end);

        if ($candidate_id !== '') {
            $criteria->compare('employee_id', $candidate_id);
        } else {
            $criteria->compare('employee_id', $this->employee_id);
            $criteria->compare('evaluation_code', $this->evaluation_code);
            $criteria->compare('start_date', $this->start_date, true);
            $criteria->compare('end_date', $this->end_date, true);
            $criteria->compare('evaluatee', $this->evaluatee, true);
            $criteria->compare('date_created', $this->date_created, true);
            $criteria->compare('created_by', $this->created_by, true);
        }

      if ($search_date_end !== '' && $search_date_start !== ''){
            $criteria->compare('start_date', $search_date_start, false, '>=');
            $criteria->compare('end_date', $search_date_end, false, '<=');
        } 

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));

    }
0
ii--L--ii 23 नवम्बर 2015, 10:46

3 जवाब

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

मुझे पता था। मुझे पता है कि मेरी हालत में कुछ कमी है।

if ($search_date_end !== '' && $search_date_start !== ''){
            $criteria->compare('start_date', $search_date_start, false, '>=');
            $criteria->compare('end_date', $search_date_end, false, '<=');
        } 

इस शर्त के साथ, केवल start_date और end_date को मान्य किया गया है। यही कारण है कि यह केवल दो तिथियां लौटाएगा। से और को।

यह जो मैंने किया है। यह सब कुछ मान्य करता है।

if ($search_date_end == '' && $search_date_start !== '') {
            $criteria->condition = "start_date >= '$search_date_start'";
        } elseif ($search_date_end !== '' && $search_date_start == '') {
            $criteria->condition = "end_date <= '$search_date_end'";
        } elseif ($search_date_end !== '' && $search_date_start !== '') {
            $criteria->condition = "start_date  >= '$search_date_start' AND end_date <= '$search_date_end'";
        }
0
ii--L--ii 23 नवम्बर 2015, 10:15

इसे इस्तेमाल करे:

 if ($search_date_end !== '' && $search_date_start !== ''){

    $criteria->addBetweenCondition('DATE_FORMAT(start_date,"%Y-%m-%d")',
    date("Y-m-d", strtotime($search_date_start)), 
    date("Y-m-d", strtotime($search_date_end)), 'AND');


    $criteria->addBetweenCondition('DATE_FORMAT(end_date,"%Y-%m-%d")',
    date("Y-m-d", strtotime($search_date_start)),
    date("Y-m-d", strtotime($search_date_end)), 'AND');
}
0
Mohammad 23 नवम्बर 2015, 08:48

आप अपने मॉडल की खोज विधि में start_date के साथ 3 शर्तें जोड़ते हैं:

$criteria->addSearchCondition('start_date', $search_date_start);
$criteria->compare('start_date', $this->start_date, true);
$criteria->compare('start_date', $search_date_start, false, '>=');

कल्पना करें कि आपका वर्ग ऐसा दिखता है:

WHERE
    start_date='2015-10-01'
    AND start_date LIKE '%2015-10-01%'
    AND start_date>='2015-10-01'

अंतिम दो स्थितियाँ बेकार हो जाती हैं। इसलिए आपको केवल एक शर्त छोड़नी होगी।

अनुलेख डीबग के लिए अपने SQL प्रश्नों को देखने के लिए main.php में एक ट्रेस लॉग सक्रिय करें:

'routes' => array(
    array(
        'class' => 'CFileLogRoute',
        'logFile' => 'application_trace.log',
        'levels' => 'trace',
        'rotateByCopy' => true,
        'enabled' => true,
    )
)
0
SiZE 23 नवम्बर 2015, 08:37