Удаление
Наиболее эффективный способ массового удаления в SQL - это использование одного оператора SQL с некоторыми заданными условиями, например,
delete from Products where id>3
Используются индексы, разделы и т. Д.
Существует способ достичь этого значения производительности с помощью Doctrine 1.2 - с помощью операторов DQL DELETE . Как показано в документации, следующий запрос преобразуется в приведенный выше SQL:
$q = Doctrine_Query::create()
->delete('Products p')
->where('p.id > 3');
В вашем случае вы можете оптимизировать удаление с помощью чего-то вроде
$q = Doctrine_Query::create()
->delete('CategoryArticle ca')
->where('ca.article_id=?', $article_id)
->andWhereIn('ca.category_id', $diffRemove);
Этот код должен сгенерировать что-то вроде:
delete from CategoryArticle
where article_id = $article_id and category_id in ($diffremove)
Вставка
При вставке вы можете использовать CategoryArticle
сущность. Наиболее эффективный способ сделать это с помощью Doctrine - создать коллекцию сущностей и сохранить эту коллекцию:
$collection = new Doctrine_Collection('CategoryArticle');
foreach ($diffAdd as $id){
$ca = new CategoryArticle();
$ca->category = $id;
$ca->article = $article_id;
$collection[] = $ca;
}
$collection->save();