Codeigniter-Проблема при использовании yearweek ('поле даты') в классе где - PullRequest
0 голосов
/ 24 декабря 2018

Сегодня я столкнулся с проблемой в среде CodeIgniter, когда пытался фильтровать, используя поле даты с yearweek().Вот мой запрос в обычном режиме без определения стиля CodeIgniter

SELECT b.name as branch,str_to_date(concat(yearweek(gp.createddate), 'sunday'), '%X%V %W') as week,sum(case when amount>0 then qty else 0 end) as purchase_quantity,sum(case when amount>0 then gp.amount else 0 end) as purchase_amount,sum(case when amount<0 then qty else 0 end) as return_quantity,sum(case when amount<0 then gp.amount else 0 end) as return_amount FROM `group_purchase` gp LEFT JOIN `branch` b ON gp.branchid=b.id WHERE yearweek(gp.createddate)=yearweek('2018-12-24')  GROUP BY gp.branchid,yearweek(gp.createddate) ORDER BY yearweek(gp.createddate) DESC

Это сработало нормально и результат был получен точно. Я использовал yearweek() для группировки данных за неделю. Когда я реализовывал этот запрос в codeigniterвсе работало нормально, кроме yearweek(). Я прикрепил свою модель codeigniter к приведенному выше запросу ниже

function getPurchasereport($limit,$offset,$order_column,$order_type,$parameters)
{

    $this->db->select("b.name as branchname,str_to_date(concat(yearweek(gp.createddate), 'sunday'), '%X%V %W') as week,sum(case when amount>0 then qty else 0 end) as purchase_quantity,sum(case when amount>0 then gp.amount else 0 end) as purchase_amount,sum(case when amount<0 then qty else 0 end) as return_quantity,sum(case when amount<0 then gp.amount else 0 end) as return_amount");
     if($parameters['branch']!=NULL){
       $this->db->like('gp.branchid',$parameters['branch']);
    }
    if($parameters['cdatefrom']!=NULL){
       $this->db->where('yearweek(gp.createddate)',yearweek("$parameters['cdatefrom'])");
    }
    $this->db->group_by(array("gp.branchid", "yearweek(gp.createddate)"));
    if(empty($order_column) || empty($order_type)){
        $this->db->order_by('yearweek(gp.createddate)','asc');
    }else{
        $this->db->order_by($order_column,$order_type);
    }
    if($limit!=0){
        $this->db->limit($limit,$offset);
    }
    $this->db->join('branch b','gp.branchid=b.id ','left');
    $query = $this->db->get('group_purchase gp');
    if($query->num_rows()>0){
        return $query->result_array();
    }else{
        return FALSE;
    }
}

это выдало ошибку, как показано ниже error

1 Ответ

0 голосов
/ 24 декабря 2018

У вас ошибка из-за этой строки

if($parameters['cdatefrom']!=NULL){
       $this->db->where('yearweek(gp.createddate)',yearweek("$parameters['cdatefrom'])");
    }

функция yearweek не является допустимой функцией PHP, поэтому вы не можете использовать ее таким образом.вам нужно заменить его на следующее:

if($parameters['cdatefrom']!=NULL){
       $this->db->where('yearweek(gp.createddate)',date('YW',strtotime($parameters['cdatefrom'])));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...