2016-10-23 2 views
0

Моего контроллера (я хочу, чтобы выбрать записи, основываясь на некоторых условиях):CodeIgniter множественного, где положение не работает

public function promotion() 
{ 
    if(!$this->user_permission->check_permission())return; 

     $data['startDate'] = $this->input->post('input_date_from'); 
     $data['endDate'] = $this->input->post('input_date_to'); 
     $email = $this->input->post('email'); 

    var_dump($email); 
    var_dump($data['startDate']); 
    var_dump($data['endDate']); 

    $this->db->select('a.booking_id as booking_id, a.from_email as from_email, a.booking_date as booking_date, a.status as status, b.vendor_airway_bill as awb, b.tariff as tariff'); 
    $this->db->where('from_email', $email); 
    $this->db->where('booking_date >=', date('Y-m-d',strtotime($data['startDate']))); 
    $this->db->where('booking_date <=', date('Y-m-d',strtotime($data['endDate']))); 
    $this->db->where('status = 1'); 
    $this->db->or_where('status = 2'); 
    $this->db->from('booking as a'); 
    $this->db->join('shipment as b','a.booking_id = b.booking_id','left');  
    $query = $this->db->get(); 
    $data['result'] = $query->result_array(); 

    $this->template->render('admin/promotion',$data,'admin'); 

} 

моего взгляда (я хочу, чтобы показать бронирование отгрузки на основе from_email из пользовательского ввода я устанавливаю. стол для display:none, а когда пользовательский ввод-то в from_email ввода затем нажмите view, он показывает DataTable):

<form action="" method="post" id="cashback"> 
 
    User Email : 
 
    <input type="text" name="email" id="email"> 
 
    Booking Date : 
 
    <div id="daterange" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; display:inline"> 
 
    <span></span> <b class="caret"></b> 
 
    </div> 
 
    <input type="hidden" name="input_date_from" id="input_date_from" value=""> 
 
    <input type="hidden" name="input_date_to" id="input_date_to" value=""> 
 
    <button type="button" class="btn btn-primary" onclick="promotion();">View 
 
    </button> 
 
</form> 
 

 
<table class="table table-bordered table-striped table-condensed" id="promotion" style="display:none"> 
 
     <thead> 
 
      <tr> 
 
       <th>BookingDate</th> 
 
       <th>UserEmail</th> 
 
       <th>AirwayBill</th> 
 
       <th>Tariff</th> 
 
       <th>Status</th> 
 
      </tr> 
 
     </thead> 
 
     <tbody> 
 
     <?php foreach ($result as $r) : ?> 
 
      <tr> 
 
       <td> 
 
        <?php echo $r['booking_date'];?> 
 
       </td> 
 
       <td> 
 
        <?php echo $r['from_email'];?> 
 
       </td> 
 
       <td> 
 
        <?php echo $r['awb'];?> 
 
       </td> 
 
       <td> 
 
        <?php echo $r['tariff'];?> 
 
       </td> 
 
       <td> 
 
        <?php echo $r['status'];?> 
 
       </td> 
 
      </tr> 
 
     <?php endforeach; ?> 
 
     </tbody> 
 
    </table> 
 
</template> 
 

 
<template block="custom_js"> 
 

 
<script type="text/javascript" src="https://cdn.datatables.net/r/bs/dt-1.10.9/datatables.min.js"></script> 
 
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/2.15.1/moment.min.js"></script> 
 
<script type="text/javascript" src="https://cdn.jsdelivr.net/bootstrap.daterangepicker/2.1.24/daterangepicker.js"></script> 
 
<script src="<?php echo base_url('asset/js/typeahead.bundle.min.js') ?>"></script> 
 
<script type="text/javascript">base_url='<?php echo base_url()?>'</script> 
 
<script> 
 
    <?php if(isset($startDate) && isset($endDate)): ?> 
 
     var startDate = '<?php echo $startDate ?>'; 
 
     var endDate = '<?php echo $endDate ?>'; 
 
    <?php endif; ?> 
 

 
$(function() { 
 
    $('#promotion').DataTable(); 
 

 
    var start = typeof(startDate) === 'string' ? moment(startDate) : moment().startOf('month'); 
 
    var end = typeof(endDate) === 'string' ? moment(endDate) : moment(); 
 
    $('#input_date_from').val(start.format('YYYY-MM-DD')); 
 
    $('#input_date_to').val(end.format('YYYY-MM-DD')); 
 

 

 
    function cb(start, end) { 
 
     $('#daterange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY')); 
 
    } 
 

 
    $('#daterange').daterangepicker({ 
 
     startDate: start, 
 
     endDate: end, 
 
     ranges: { 
 
      'Today': [moment(), moment()], 
 
      'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')], 
 
      'Last 7 Days': [moment().subtract(6, 'days'), moment()], 
 
      'Last 30 Days': [moment().subtract(29, 'days'), moment()], 
 
      'This Month': [moment().startOf('month'), moment().endOf('month')], 
 
      'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')] 
 
     } 
 
    }, cb); 
 

 
    cb(start, end); 
 

 
    $('#daterange').on('apply.daterangepicker', function(ev, picker) { 
 
     $('#input_date_from').val(picker.startDate.format('YYYY-MM-DD')); 
 
     $('#input_date_to').val(picker.endDate.format('YYYY-MM-DD')); 
 
    }); 
 

 
}); 
 

 
function promotion() { 
 

 
    input_date_to = $('#input_date_to').val(); 
 
    input_date_from = $('#input_date_from').val(); 
 
    email = $('#email').val(); 
 

 
    $.ajax 
 
    ({ 
 
     url: "<?php echo site_url('admin/promotion')?>", 
 
     type: "POST", 
 
     dataType: "text", 
 
     data: {email: email, input_date_from: input_date_from, input_date_to: input_date_to}, 
 
     success: function(data) 
 
     { 
 
      $('#promotion').show(); 
 
      console.log(email); 
 
      console.log(input_date_from); 
 
      console.log(input_date_to); 
 
     } 
 
    }) 
 
} 
 

 
</script>

Пробовал фильтровать данные на основе from_email, date_range_from и date_range_to. Когда я var_dump входной пост, он показывает значение, как я ожидал, но это не запускали this->db->where('from_email',$email), так что я получаю все результат ..

+0

Какое сообщение об ошибке выдает SQL-оператор? –

+0

Все это выглядит хорошо для меня. Что произойдет, если вы сняли оператор or_where? Еще одна задача - запустить запрос, но использовать get_compiled_select, а не получать, а затем выводить строку запроса, чтобы увидеть, что происходит. http://www.codeigniter.com/user_guide/database/query_builder.html#CI_DB_query_builder::get_compiled_insert – PaulD

+0

я не вижу ошибки @ ZamronyP.Juhara – may

ответ

0

[SOLVED]. Использовать where_in() вместо or_where

0

Попробуйте заменить

$this->db->where('status = 1'); 
$this->db->or_where('status = 2'); 

во что-то вроде:

$this->db->where('(status = 1 OR status = 2)'); 

примечание скобка важно сделать OR оператор получить высшее presedence чем AND оператора. Также включите журнал запросов и проверьте, какой фактический SQL отправлен на сервер базы данных, чтобы лучше понять, почему.

+0

i don Не понимаю, почему это не дает мне результата :( – may

+0

Интересно, имеет ли он какое-то отношение к jQuery datatable, потому что когда таблица загружается, он показывает весь результат независимо от того, какой именно адрес электронной почты. Но я не уверен в этом – may