1

我正在尝试将此 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

   category_id == 1 || category_id == 2 || ... || category_id == 5

被删除。

但是只有第一条记录字段 article_id = 3, category_id = 1

被删除。

我打错了什么?

4

2 回答 2

2

如果要在 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() ,因为记录会被再次保存。

于 2014-02-07T22:27:36.170 回答
0

我不确定您发送它删除的 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),
                             ));
于 2013-09-03T05:32:17.963 回答