我有这些表格
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表上更新它时,还有一件事吗?
答案 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;
}
可能这不是正确的方法,但这种方法对我有用。