2011-01-28 21 views
7

vi this en el foro CodeIgniterCodeIgniter - Base de datos: cómo actualizar varias tablas con una sola consulta de actualización

Teniendo en cuenta el código de abajo

UPDATE a 
INNER JOIN b USING (id) 
SET a.firstname='Pekka', a.lastname='Kuronen', 
b.companyname='Suomi Oy',b.companyaddress='Mannerheimtie 123, Helsinki Suomi' 
WHERE a.id=1; 

Ésta es la forma en que le aparentemente hacerlo en CodeIgniter

$this->db->set('a.firstname', 'Pekka'); 
$this->db->set('a.lastname', 'Kuronen'); 
$this->db->set('b.companyname', 'Suomi Oy'); 
$this->db->set('b.companyaddress', 'Mannerheimtie 123, Helsinki Suomi'); 
$this->db->where('a.id', 1); 
$this->db->join('table2 as b', 'a.id = b.id'); 
$this->db->update('table as a'); 

Esto no funciona en la realidad. He echado un vistazo al SQL que esto produce y los resultados ni siquiera mencionan la unión.

¿Alguien tiene alguna idea de cómo hacer una actualización con una unión utilizando la clase Active Record Database de Codeigniter?

Respuesta

11

Una solución que he encontrado es eliminar la unión por completo y mover la condición de unión a una función 'donde', también tendrá que cambiar la cadena de actualización para incluir la nueva tabla.

$this->db->set('a.firstname', 'Pekka'); 
$this->db->set('a.lastname', 'Kuronen'); 
$this->db->set('b.companyname', 'Suomi Oy'); 
$this->db->set('b.companyaddress', 'Mannerheimtie 123, Helsinki Suomi'); 

$this->db->where('a.id', 1); 
$this->db->where('a.id = b.id'); 
$this->db->update('table as a, table2 as b'); 
+1

Pensé que podría salvar a alguien en algún momento. Necesita usar la "tabla como", de lo contrario, CodeIgniter intenta escapar de las tablas y falla. –

4

El uso de dos consultas separadas dentro de un transaction debe resolver su problema. Si una consulta falla, la otra se retrotrae.

Cuestiones relacionadas