Как отфильтровать товары по размеру в codeigniter - PullRequest
0 голосов
/ 26 февраля 2019

Я фильтрую товары по размеру, я выбрал все, что выбрал пользователь li, с помощью этой функции jquery:

var arr_size = [];
i = 0;
$(".filtersize li a").each(function(e) {
    if ($(this).hasClass("selected-filter")) {
        arr_size[i++]= $(this).text();
    }
});

это работает нормально, но я передаю этот массив из ajax в контроллер codeigniter и яСохраняю размер данных в виде значения через запятую в базе данных:

размер столбца:

'S', 'M', 'L', 'XL'

и массив javascript также содержит разделенное запятыми значение, например, для.если пользователь выбрал два значения, он будет содержать S, M я не могу искать значения массива в дБ, используя аналогичные функции. Есть ли какая-либо другая функция или метод для достижения этого, мой код выглядит следующим образом:

var data = {id:pid,arr_s:arr_size};
var url = "<?php echo base_url()?>controlle/viewproducts";
var result = post_ajax(url, data);

контроллер:

public function viewproducts()
{
    $id=$this->input->post('id');
    $size_arr=$this->input->post('arr_s');
    $result['product'] = $this->product_m->get_product_size_filter($id,$size_arr);
    $this->load->view('product_filter_view/view_product',$result);
}

Модель:

public function get_product_size_filter($id,$size) {
    $where_query = '';
    $size_array = explode(',', $size);
    foreach ($size_array as $size_item) {
        $size = "$size_item";
        $where_query .= "dg_products.size LIKE '%$size%' OR ";
    }

    $where_query = rtrim($where_query, " OR ");

    $this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
    $this->db->from('dg_products');
    $this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');
    $this->db->where('dg_products.category_id',$id);
    $this->db->where($where_query);
    $this->db->group_by("dg_products.id");
    $query = $this->db->get();   
    $result = $query->result();
    return $result; 
}

1 Ответ

0 голосов
/ 26 февраля 2019

Я думаю, вы можете преобразовать строку size в массив и выполнить запрос.Ниже приведен пример кода:

public function viewproducts() 
{
    $id = $this->input->post('id', true);
    $size_string = $this->input->post('arr_s', true);
    $size_array = explode(',', $size_string);
    $result['product'] = array();

    foreach ($size_array as $size_item) {
        $size = "'$size_item'";
        $result['product'][] = $this->product_m->get_product_size_filter($id, $size);
    }

    $this->load->view('product_filter_view/view_product', $result);
}

Если вы не хотите запускать запросы в несколько дБ, вы можете использовать:

public function viewproducts() 
{
    $id = $this->input->post('id', true);
    $sizes = $this->input->post('arr_s', true);
    $result['product'] = $this->product_m->get_product_size_filter($id, $sizes);

    $this->load->view('product_filter_view/view_product', $result);
}

Вот модель:

public function get_product_size_filter($id, $size)
{
    $where_query = '';
    $size_array = explode(',', $size);

    foreach ($size_array as $size_item) {
        $size = "'$size_item'";
        $where_query .= "size LIKE '%$size%' OR ";
    }

    $where_query = rtrim($where_query, " OR ");

    $this->db->select('*');
    $this->db->from('dg_products');
    $this->db->where($where_query);
    $query = $this->db->get();   
    return $query->result();
}

ОБНОВЛЕНО

public function get_product_size_filter($id,$size)
{
    $where_query = '';
    $size_array = explode(',', $size);

    foreach ($size_array as $size_item) {
        $size = "$size_item";
        $where_query .= "dg_products.size LIKE '%$size%' OR ";
    }

    $where_query = rtrim($where_query, " OR ");

    $this->db->select('dg_products.*, AVG(dg_rating.rating) As averageRating');
    $this->db->from('dg_products');
    $this->db->join('dg_rating', 'dg_products.id = dg_rating.product_id','left');
    $this->db->where('dg_products.category_id',$id);
    $this->db->where("($where_query)");
    $this->db->group_by("dg_products.id");
    $query = $this->db->get();   
    $result = $query->result();

    return $result; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...