2016-06-14 78 views
2

我想知道是否可以在phalcon ODM中批量删除(使用单一操作),而不是通过'delete()'方法获取文档并在循环中逐个删除这些文档?Phalcon ODM批量删除

我需要的是这样的:

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

官方文件说,这件事没有什么,以及倾销类方法显示没有新的信息。

PS。我使用尔康2.0.10

+0

我也想知道是相同的,但是,经过一番搜索我没有找到任何东西。也许作为一个计划B,你总是可以在一个BaseModel中接受Collection和WhereClause作为参数并迭代结果集。就像这里的文档中的示例:https://docs.phalconphp.com/en/latest/reference/odm.html#deleting-records让我们希望别人有更好的解决方案:) –

+2

作为我已经创建的解决方法一个方法和直接使用mongoclient'remove()',但真的很期待一些不太脏的东西) –

+1

嗨尤金苏,请你分享你的方法,并告诉我们在哪个文件中请把它:) –

回答

1

有人在问,分享我使用

我创建了一个方法,模型库的方法。所有其他模型扩展它,所以他们可以访问它的方法。我正在使用静态函数为了不创建类的一个实例。

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

你是对的,谢谢,现在将编辑 –