我正试图将此sql查询作为php活动记录查询运行:
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
和
category_id == 1 || category_id == 2 || ... || category_id == 5
要删除。
但是,只有第一条带字段的记录article_id=3,category_id=1
被删除。
我打错了什么?
如果要在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(),因为记录将被再次保存。
我真的不确定你要删除的ID是否可以为空?文档显示了"大规模更新或删除"。
Post::table()->delete(array('id' => array(5, 9, 26, 30));
所以,在你的情况下,翻译成
ArticleCategory::delete(array(array('id' => array(1, 4, 5, 6, 7)),
'conditions'=> array('article_id = ?', 10),
));