如何在产品更新页面中显示和更新选定和未选择的类别

时间:2016-07-22 04:47:43

标签: php html mysql

我有这些表格

Categories:
    cat_id
    ... other ...
    primary key (cat_id)

Product:
    Product_id
    ... other ...
    primary key (Product_id)

Product_cat:
    Product_id foreign key (post.Product_id)
    cat_id foreign key (Categories.cat_id)
    primary key (category_id,product_id)

我已在创建新产品页面上成功将多个类别插入到产品中。但我不明白如何在产品更新页面上显示所选类别以及未选择的类别。如果我查询Product_cat表,它将只生成在新产品页面上分配的选定类别。我应该分别从类别和Product_cat表中查询,并将其存储到数组并合并这两个数组并在更新页面上显示它?当我更新产品类别如何在Product_cat表上更新它时,还有一件事吗?

1 个答案:

答案 0 :(得分:0)

感谢您的支持,感谢谁投票支持我的问题。这是我的答案 -

在控制器上:

<select class="form-control" name="categories[]" multiple>
<?php
    $product_id = "your product id";
    $category = $this->admin_product_model->getAllCat();
    foreach ($category as $row)
    {
        if( $this->admin_product_model->getCatByProductId($product_id,$row->cat_id) ){
            echo '<option value="'.$row->cat_id.'" selected>'.$row->cat_name.'</option>';
        }else{
            echo '<option value="'.$row->cat_id.'">'.$row->cat_name.'</option>';
        }
    }
?>
</select>

这只是类别选择框部分,其中$ product_id =&#34;您的产品ID&#34;。我只是从admin_product_model调用getAllCat()方法,当显示它时,只检查product_category表中是否已存在该类别。如果是,则添加一个选定的属性,否则按原样显示。

在admin_product_model模型:

//Get all category
function getAllCat(){
    $query = $this->db->get('category')->result();
    return $query;
}

//此方法检查产品是否具有此类别

function getCatByProductId($product_id,$cat_id){

    $this->db->from("product_cat");
    $this->db->where('product_id',$product_id);
    $this->db->where('cat_id',$cat_id);
    $query = $this->db->get();

    if($query->num_rows()>=1){
        return TRUE;
    }
    else
    {
        return FALSE;
    }   
}

当用户在产品更新页面上选择或取消选择类别和其他字段时,updateProduct方法会将所有与产品相关的字段更新为产品表,并检查更新是否成功。如果是,则从product_cat表中删除product_id的所有数据,然后遍历$ product_categories并将新值插入product_cat表。

//更新产品

function updateProduct($id,$product_categories)
{

// if all done just update new data to product
$data = array(
    ----your data to update product table----
);

$this->db->where('product_id',$id);
if($this->db->update('product',$data)){

    //Delete existing category
    $this->db->where('product_id', $id);
    $this->db->delete('product_cat');

    //store categories like this when user post data "$product_categories = $this->input->post('categories')"
    foreach ((array)$product_categories as $category)
    {
        $pc_data = array(
            'product_id' => $id,
            'cat_id' => $category
        );

        $this->db->insert('product_cat', $pc_data);    
    }
}

return true;

}

可能这不是正确的方法,但这种方法对我有用。