2011-01-28 13 views
7

で複数のテーブルを更新するために、私はCodeIgniterのフォーラムにthisを見た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を見ていますが、結果については言及していません。

Codeigniterのアクティブレコードデータベースクラスを使用して、どのように結合を使って更新を行うのですか?

答えて

11

私が見つけた1つの解決策は、結合を完全に削除し、結合条件を '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'); 
+1

私はいつか誰かを救うと思った。 CodeIgniterはテーブルをエスケープしようとすると失敗します。 –

4

transaction内の2つの別々のクエリを使用すると、あなたの問題を解決する必要があります。クエリが失敗した場合、もう1つはロールバックされます。

関連する問題