如何在PHP ActiveRecord中转换此原始SQL查询?
我正在尝试将此sql查询作为php activerecord查询运行:如何在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
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();