4

一点代码片段:

$this->db->where('id', $outfit_id);
$this->db->update('outfit_main',$data);

//Delete productsettings for specific outfit (They are added below with new values)
$this->db->where('outfit_id', $outfit_id);
$this->db->delete('outfit_products');

//Delete outfit_images for specific outfit as well. They are also added below
$this->db->where('outfit_id', $outfit_id);
$this->db->delete('outfit_images'); 

我想做的是:

  1. 从装备主中删除行,其中 id = $outfit_id
  2. 从 suit_products 中删除 suit_id = $outfit_id 的行
  3. 从 suit_images 中删除 suit_id = $outfit_id 的行

但实际上当我添加最后两行时:

$this->db->where('outfit_id', $outfit_id);
$this->db->delete('outfit_images'); 

*它也会从 suit_main 中删除所有行。为什么?*

4

4 回答 4

7

尝试将 where 子句与删除活动记录结合起来:

$this->db->delete('outfit_main', array('id' => $outfit_id));
$this->db->delete('outfit_products', array('outfit_id' => $outfit_id));
$this->db->delete('outfit_images', array('outfit_id' => $outfit_id));
于 2013-10-06T22:34:44.933 回答
1

看来,Ci正在使用old/cached查询where子句,所以如果你flush使用清除缓存

$this->db->flush_cache();

然后使用

$this->db->where('outfit_id', $outfit_id);
$this->db->delete('outfit_images');

然后,也许它会以正确的方式工作。检查缓存示例,它会更清楚,我也对此感到困惑,所以等待回复。

于 2013-10-06T22:43:16.853 回答
1

你可以试试这个。但它不会工作,因为。codeigniter 在删除活动记录时忽略联接。

$this->db->join("table2", "table1.thing_id = table2.id")
  ->where("table2.otherthing_id", $id)
  ->delete("table1");

您可以使用以下代码从不同的表中删除数据。它会帮助你。

$sql = "DELETE t1 FROM table1 t1
  JOIN table2 t2 ON t1.thing_id = t2.id
  WHERE t2.otherthing_id = ?";
$this->db->query($sql, array($id));
于 2017-01-08T14:08:03.727 回答
0

如果您想从多个表中删除数据,则可以将一组表名传递给 delete()。更简单的方法

$tables = array('table1', 'table2', 'table3');
$this->db->where('id', '5');
$this->db->delete($tables);
于 2017-01-20T01:45:47.860 回答