2016-06-14 4 views
2

Мне интересно, можно ли сделать массовое удаление (используя единую операцию) в phalcon ODM вместо того, чтобы извлекать документы и удалять их один за другим в цикле методом 'delete()?Phalcon ODM bulk delete

мне нужно что-то вроде этого:

$db->users->remove(array("type" => "abc")); 

Официальная документация ничего не говорит об этом, а также методы демпинг класса не обнаруживают никакой новой информации.

PS. Я использую Phalcon 2.0.10

+0

Мне было также интересно то же самое, однако после некоторых поисков я ничего не нашел. Возможно, в качестве плана B вы всегда можете сделать метод в BaseModel, который принимает Collection и WhereClause как параметры и итерации по набору результатов. Как и в примере в документах: https://docs.phalconphp.com/ru/latest/reference/odm.html#deleting-records Будем надеяться, что у кого-то есть лучшее решение :) –

+2

Как обходной путь, который я создал метод и использование mongoclient 'remove()' напрямую, но действительно с нетерпением жду чего-то менее грязного) –

+1

Привет, Юджи Сью, не могли бы вы поделиться своим методом и сообщить нам, в каком файле поставить его пожалуйста :) –

ответ

1

Некоторые люди просили поделиться метод я использую

Я создал метод в ModelBase. Все остальные модели расширяют его, поэтому у них есть доступ к его методам. Я использую статическую функцию, чтобы не создавать экземпляр класса.

class ModelBase extends \Phalcon\Mvc\Collection 
{ 
    public static function deleteBulk(array $conditions) 
    { 
     $class = get_called_class(); 
     $model = new $class; 
     $collection = $model->getSource(); 

     # I have a registered service mongo in DI, so i just get it from there 
     $mongo = \Phalcon\Di::getDefault()->getMongo(); 

     return $mongo->$collection->remove($conditions); 
    } 
} 

Тогда у меня есть модель:

class Items extends ModelBase 
{ 

} 

Поэтому, когда мне нужно навалом удалить, я просто позвонить:

Items::deleteBulk(array("type" => "abc")); 
+0

Что делать, если вы переименовали таблицу в свою модель? не проще ли назвать что-то вроде '$ this-> getSource()' в вашей базовой модели вместо 'explode'? – Timothy

+0

Вы правы, спасибо, сейчас отредактируйте –

Смежные вопросы