1

このSQLクエリをphpアクティブレコードクエリとして実行しようとしています:

 delete from article_categories where 
     article_id = 10
 and
     category_id in (1,4,5,6,7)

このステートメントは、mysql コンソールから実行すると正常に機能します。

私はphpアクティブレコードからこれをやってみました:

   $query["conditions"] =  array('article_id = ? and category_id in (?)', 10, "1,4,5,6,7");
   ArticleCategory::delete_all($query);

問題は、一度に 1 つのレコードしか削除されないことです。

一致するすべてのレコードを期待します

   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 に答える