Php 如何将更新SQL查询替换为CodeIgniter ActiveRecord?
我使用CodeIgniter框架。当我尝试使用活动记录更新数据库时,出现了一个问题。 我发现了如何通过原始SQL解决它Php 如何将更新SQL查询替换为CodeIgniter ActiveRecord?,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我使用CodeIgniter框架。当我尝试使用活动记录更新数据库时,出现了一个问题。 我发现了如何通过原始SQL解决它 UPDATE articles_articlegroups SET isDeleted = 1 WHERE articlegroupId IN ( SELECT id FROM articlegroups WHERE parent_id = $catID ) 但我需要使用AR I中堂类别和子类别与文章。类别和子类别在
UPDATE articles_articlegroups
SET isDeleted = 1
WHERE articlegroupId IN (
SELECT id
FROM articlegroups
WHERE parent_id = $catID
)
但我需要使用AR
I中堂类别和子类别与文章。类别和子类别在一个表中。与父id链接。
文章链接位于一对多表中,因为它可以属于不同的类别
要删除所有文章,只需知道父id。最简单快捷的方法是通过
$db->query(“sql”)
但不要直接传递参数以避免sql注入,而是绑定sql字符串中的参数 就这样试试看
$this->db->query("your query here");
最终查询
$this->db->query("UPDATE articles_articlegroups
SET isDeleted = 1
WHERE articlegroupId IN (
SELECT id
FROM articlegroups
WHERE parent_id = $catID
)");
是的,我做到了。但是我需要用$this->db->update()
$this->db->query()替换它。
将执行您的更新查询<代码>$this->db->update()在使用时不需要,$this->db->query()
确定。但是我如何使用$this->db->where(),$this->db->update(),$this->db->set()和其他方法呢?不需要使用所有这些AR。当您使用->query()
时,将普通查询作为参数传递。CI将自动执行查询。谢谢,我阅读了文档并找到了子查询的解决方案。select()…->get_compiled_select()和where_in();
$this->db->query("UPDATE articles_articlegroups
SET isDeleted = 1
WHERE articlegroupId IN (
SELECT id
FROM articlegroups
WHERE parent_id = $catID
)");
$data = array(
'isDeleted' => 1
);
$this->db->set($data);
$this->db->where(
'articlegroupId IN (
SELECT id
FROM articlegroups
WHERE parent_id = '.$catID.'
)'
);\
$this->db->update('articles_articlegroups');