codeigniter - база данных: как обновить несколько таблиц с помощью одного запроса на обновление - PullRequest
7 голосов
/ 28 января 2011

Я видел это на форуме codeigniter

Учитывая приведенный ниже код

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; 

Вот как вы, очевидно, сделали бы это в 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');

это не работает в реальности.Я посмотрел SQL, который это производит, и результаты даже не упоминают соединение.

Кто-нибудь знает, как выполнить обновление с объединением с использованием класса базы данных Active Record Codeigniter?

Ответы [ 2 ]

11 голосов
/ 28 января 2011

Одно решение, которое я нашел, состоит в том, чтобы полностью удалить соединение и переместить условие соединения в функцию 'where', также вам нужно будет изменить строку обновления, чтобы включить новую таблицу.

$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');
4 голосов
/ 31 января 2011

Использование двух отдельных запросов в транзакции должно решить вашу проблему.Если запрос не выполняется, другой откатывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...