2011-06-07 14 views
9

Estoy intentando hacer un pequeño CMS abierto con CodeIgniter y ahora estoy trabajando en el sistema de categorías.Actualizar lote con CodeIgniter

Estoy realmente atrapado con eso y después de muchos intentos y mensajes en el foro no lo resolví.

tengo 2 mySQL TABLAS

  • # 1: ft_categories (lista de nombres de todos los de Categoría del alojamiento con 2 campos: CATEGORY_NAME e id)
  • # 2: ft_upload_data (lista de todos los mensajes con campos como la identificación, título , categoría, fecha y así sucesivamente)

Quiero actualizar mi # 1 TABLE con los datos básicos en forma de nombres de una edición de categoría (esta forma se llena de entradas en un bucle para editar varias categorías a la vez)

aquí está:

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'; } 

Esta es la forma con los insumos recuperados de la base de datos donde se puede editar el nombre.

Ok ahora, cuando edita los nombres de la Categoría del alojamiento que van al controlador El '' update_categories hacer la solicitud de actualización

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); 

} 

Esto hará que los campos de entradas múltiples para actualizar la base de datos. Y ahora voy al modelo para actualizar los datos en la base de datos y aquí está el problema:

function update_categories($data) { 

    ? 

no sé qué puedo hacer para actualizar los nombres correctamente con algo así como un insert_batch pero con ACTUALIZACIÓN porque a pesar de que necesito para actualizar la tabla # 1, también deberá actualizar el nombre en el campo de la tabla # 2 aCTUALIZACIÓN doble en 2 Tablas y 1 actualización por lotes en la mesa # 1

Obviamente me trataron de agregue una TABLA más: TABLA # 3, que obtiene la ID de campo de la TABLA N. ° 1 y la combina con la ID de campo de la TABLA N. ° 2, pero no puedo determinar la conexión entre la tabla 3 s.

¡Cualquier ayuda sería muy muy apreciada! ¡¡Muchas gracias!! (perdón por mi inglés malo)


Thanks for answer!

Ok tengo esta tercera mesa ahora me gustaría recuperar el 'category_name' mostrar esta dentro de la 'post'

tengo esto:

$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(); 

Pero dice que no es desconocida la columna 'assigned_categories.ft_categories_id' en 'en la cláusula'

(assigned_categories es mi tercera tabla con el ID del mensaje y la categoría ID emparejado)

Cualquier ¿idea?

+0

se olvidó tthat que puede hacer aa los datos más simples '$ [] = ''; ' – dynamic

Respuesta

-3

Primero no puede actualizar varias filas en una consulta, por lo que no hay nada como insert_batch() para las actualizaciones; debe hacerlo en un bucle para cada fila. A continuación, debe usar la tercera tabla para vincular la identificación de la publicación con la identificación de categoría en una relación de uno a muchos utilizando claves externas (InnoDB, peor rendimiento) O al menos usar el campo categoría_categoría en la TABLA # 2 que enlaza con la identificación de categoría, para que no lo haga necesita actualizar esta tabla en caso de cambios en la TABLA # 1.

16

intenta utilizar 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'); 

El primer parámetro contendrá el nombre de la tabla, el segundo es un arreglo asociativo de los valores, el tercer parámetro es la clave dónde.

esperanza esta ayuda ........................

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') 
+1

¿Cómo agregar la condición de 'update_batch'? –

+0

@SomnathMuluk consulte mi actualización y consulte el documento ... http://ellislab.com/codeigniter/user-guide/database/active_record.html –

+2

¿Cómo agregar varias condiciones? ¿'$ This-> db-> where()' funciona para update_batch? –