2016-06-14 143 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

你是對的,謝謝,現在將編輯 –