Обновление пакета с CodeIgniter - PullRequest
9 голосов
/ 07 июня 2011

Я пытаюсь сделать небольшую открытую CMS с CodeIgniter, и сейчас я работаю над системой категорий.

Я действительно застрял с этим, и после многих попыток и сообщения на форуме я не решил его.

У меня есть 2 MySQL ТАБЛИЦЫ

  • # 1: ft_categories (перечислите все имена категорий с 2 ​​полями: Категория_имя и идентификатор)
  • # 2: ft_upload_data (список всех сообщений с полями, такими как id, title, category, дата и тд)

Я хочу ОБНОВИТЬ мою # 1 ТАБЛИЦУ данными в форме редактирования названий категорий (эта форма заполняется входными данными в цикле для редактирования нескольких категорий одновременно)

Вот оно:

if ($result != NULL) {
echo form_open('admin/update_categories/');
if (isset($result) && $result != NULL) {

    foreach ($result as $row) {
    echo form_input('category_name[]' ,$row->category_name);
    echo anchor("admin/delete_category/$row->category_name", 'Delete category');
    echo '<br /><br />';
    }

    echo '<br /><br />';
    echo form_submit('','Save');
    echo form_close();

} } else { echo 'NO categories'; }

Это форма с данными, полученными из БД, где вы можете редактировать имя.

Хорошо, теперь, когда вы редактируете имена категорий, вы переходите к CONTROLLER 'update_categories', чтобы выполнить запрос ОБНОВЛЕНИЯ

    function update_categories(){

    $i = 0;
    foreach ($this->input->post('category_name') as $cat)
        $data[$i++]['category_name'] = $cat;
        // The $i++ creates a multi-dimensional array to insert
        // multiple rows into the DB.

    $this->admin_model->update_categories($data);

}

Это приведет к тому, что поля ввода будут кратны ОБНОВЛЕНИЮ БД. А теперь я иду в МОДЕЛЬ, чтобы ОБНОВИТЬ данные в БД и ЗДЕСЬ ПРОБЛЕМА:

    function update_categories($data) {

    ?

Я не знаю, что я могу сделать, чтобы правильно обновить имена с помощью чего-то вроде insert_batch, но с UPDATE, потому что, хотя мне нужно ОБНОВИТЬ ТАБЛИЦУ № 1, мне также НУЖНО обновить имя в поле в ТАБЛИЦА № 2 Дважды ОБНОВЛЕНИЕ на 2 таблицы и 1 пакетное ОБНОВЛЕНИЕ в ТАБЛИЦЕ № 1

Очевидно, я попытался добавить еще одну ТАБЛИЦУ: ТАБЛИЦА # 3, которая получает идентификатор поля ТАБЛИЦЫ № 1 и сопоставляет его с идентификатором поля ТАБЛИЦЫ № 2, но я не могу понять, как установить связь между этими 3 таблицами.

Любая помощь будет очень цениться! Большое спасибо!! (извините за мой плохой английский)


Спасибо за ответ!

Хорошо, у меня есть эта третья таблица, теперь я хотел бы получить 'category_name', чтобы показать это в 'post'

У меня есть это:

    $this->db->order_by('rank', 'asc');

$this->db->select('*');
$this->db->from('ft_upload_data');
$this->db->join('ft_categories', 'assigned_categories.ft_categories_id = assigned_categories.ft_upload_data_id');

$query = $this->db->get();



return $query->result();

Но там написано, что есть неизвестный столбец 'assign_categories.ft_categories_id' в 'предложении'

(assign_categories - мой третий СТОЛ с идентификатором поста и идентификатором категории)

Есть идеи?

Ответы [ 2 ]

16 голосов
/ 05 марта 2012

попробуйте использовать UPDATE_BATCH

$this->db->update_batch();



$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name 2' ,
      'date' => 'My date 2'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name 2' ,
      'date' => 'Another date 2'
   )
);

$this->db->update_batch('mytable', $data, 'title'); 

Первый параметр будет содержать имя таблицы, второй - ассоциативный массив значений, третий параметр - ключ where.

надеюсь, что это поможет ........................

UPDATE 

// Produces: 
// UPDATE `mytable` SET `name` = CASE
// WHEN `title` = 'My title' THEN 'My Name 2'
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// ELSE `name` END,
// `date` = CASE 
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date` END
// WHERE `title` IN ('My title','Another title')
0 голосов
/ 08 июня 2011

Во-первых, вы не можете обновить несколько строк в одном запросе, поэтому нет ничего похожего на insert_batch () для обновлений - вы должны делать это в цикле для каждой строки. Затем вы должны использовать 3-ю таблицу, чтобы связать идентификатор записи с идентификатором категории в отношении один ко многим, используя внешние ключи (InnoDB, худшая производительность) ИЛИ хотя бы использовать поле category_id в ТАБЛИЦЕ № 2, которое ссылается на идентификатор категории, поэтому необходимо обновить эту таблицу в случае изменений в ТАБЛИЦЕ № 1.

...