【问题标题】:codeigniter - database : how to update multiple tables with a single update querycodeigniter - 数据库:如何使用单个更新查询更新多个表
【发布时间】:2011-01-28 16:07:44
【问题描述】:

我在codeigniter论坛上看到this

考虑下面的代码

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 的 Active Record 数据库类通过联接进行更新吗?

【问题讨论】:

    标签: mysql database codeigniter activerecord


    【解决方案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');
    

    【讨论】:

    • 我想我可以节省一些时间。您需要使用“table as a”,否则 CodeIgniter 会尝试对表进行转义,但它会失败。
    【解决方案2】:

    transaction 中使用两个单独的查询应该可以解决您的问题。如果一个查询失败,另一个查询会回滚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-11
      • 2013-06-12
      • 1970-01-01
      • 2011-02-11
      相关资源
      最近更新 更多