如何在PHP ActiveRecord中转换此原始SQL查询?

如何在PHP ActiveRecord中转换此原始SQL查询?,php,activerecord,phpactiverecord,Php,Activerecord,Phpactiverecord,我正在尝试将此sql查询作为php activerecord查询运行: delete from article_categories where article_id = 10 and category_id in (1,4,5,6,7) 当我从mysql控制台运行该语句时,它运行良好 我尝试从php activerecord执行此操作: $query["conditions"] = array('article_id = ? and category_id

我正在尝试将此sql查询作为php activerecord查询运行:

 delete from article_categories where 
     article_id = 10
 and
     category_id in (1,4,5,6,7)
当我从mysql控制台运行该语句时,它运行良好

我尝试从php activerecord执行此操作:

   $query["conditions"] =  array('article_id = ? and category_id in (?)', 10, "1,4,5,6,7");
   ArticleCategory::delete_all($query);
问题是一次只删除一条记录

我希望所有的记录都匹配

   article_id == 3

删除

但是,只有包含字段的第一条记录 物品编号=3,类别编号=1

被删除


我打错了什么?

我不确定您要删除的ID是否为空?显示“大规模更新或删除”的内容

所以,在你的情况下,这可能是

ArticleCategory::delete(array(array('id'        => array(1, 4, 5, 6, 7)),
                              'conditions'=> array('article_id = ?', 10),
                             ));
如果要在where子句中使用“IN(?)”,请确保传递一个数组作为条件值。否则,它将只读取IN(“1,2,3,4”)而不是IN(1,2,3,4)(注意前一个版本中的双引号!)

所以,它看起来像这样:

$article_id = 1;
$categories = array(1, 2, 3, 4);
ModelName::delete_all(array(
    'conditions' => array('article_id = ? and category_id IN (?)', $article_id, $categories)
));
如果您只想删除当前记录,请执行以下操作:

$record->delete();

注意不要在之后调用->save(),因为记录将再次保存。

这不起作用。我不能静态调用该方法。如果我尝试相同的方法,除了从'ArticleCategory->table->delete'I get'列未找到外:1054未知列'conditions'在'where子句'中可能缺少一个额外的数组,我可以为您查找它,但您可以通过测试更快地找到它。(编辑了答案,但你需要测试一下。这是文档所暗示的,这至少应该对你有所帮助。是的,这可能来得有点晚,但嘿,迟到总比不迟到好,对吧?没错……谁知道……我可能需要在将来再次解决这个问题,并且忘记了答案。
$article_id = 1;
$categories = array(1, 2, 3, 4);
ModelName::delete_all(array(
    'conditions' => array('article_id = ? and category_id IN (?)', $article_id, $categories)
));
$record->delete();