2013-11-29 1 views
0

У меня есть несколько вариантов для моих категорий продуктов, и у меня есть 3 таблицы для них. Мои таблицы выглядит следующим образом:обновить несколько значений выбора в базе данных mysql с помощью codeigniter

продукции:

product_id | product_name 
    1  | my_package 

категории:

category_id | category_name 
    1  |  category 1 
    2  |  category 2 
    3  |  category 3 

product_categories:

pc_id | product_id | category_id 
    1  |   1  |  1 
    2  |   1  |  2 
    3  |   1  |  3 

Когда я хочу обновить таблицу product_categories, она не обновляется. Я хотел установить только одну категорию для своего продукта и удалить два других, но когда я посмотрел на моей базе данных я видел, что он изменил все строки, как:

product_categories:

pc_id | product_id | category_id 
    1  |   1  |  2 
    2  |   1  |  2 
    3  |   1  |  2 

Это мой код в виде:

foreach($selected_categories as $selected_category){ 
    $selected_category_options[] = $selected_category->category_Id; 
} 

echo form_multiselect('product_category_id[]', $category_options, set_value('product_category_id', $selected_category_options)); 

и это код в моей модели:

foreach($_POST['product_category_id'] as $key => $product_category_id){ 

    $options = array(
     'category_Id' => $product_category_id 
    ); 

    $this->db->where('product_id', $options['product_id']); 
    $this->db->update('product_categories', $options); 
} 

ответ

2

Сначала удалите категории, а затем вставить

$options = array(
    'category_Id' => $_POST['product_category_id'][0], 
    'product_id' => 'product id here'/* first category will be inserted only*/ 
); 

$this->db->query("DELETE FROM product_categories WHERE product_id=". $options['product_id']); /* this will delete all categories assigned to $options['product_id']*/ 

$this->db->insert('product_categories', $options); /* will insert the first category from $_POST['product_category_id']*/ 

Если вы хотите несколько обновлений, то попробуйте это

$this->db->query("DELETE FROM product_categories WHERE product_id='product id here'"; 
foreach($_POST['product_category_id'] as $key => $product_category_id){ 


$options = array(
    'category_Id' => $product_category_id, 
    'product_id' => 'product id here' /* first category will be inserted only*/ 
);  
    $this->db->insert('product_categories', $options); 
} 
+0

это правильный способ сделать это ?! или это просто трюк, чтобы избавиться от проблемы ?! – Afshin

+0

@Afshin это не правильный путь, его быстрое решение в правильном направлении - получить идентификаторы кота из сообщения и сравнить с идентификаторами cat от db и удалить те, которые не находятся в $ _POST из db, и добавить те, которые являются новыми, как при сравнении –

+1

в любом случае спасибо :) – Afshin

Смежные вопросы