【问题标题】:Phalcon ODM bulk deletePhalcon ODM 批量删除
【发布时间】:2016-10-14 19:09:02
【问题描述】:

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

我需要这样的东西:

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

官方文档对此只字未提,转储类方法也没有透露任何新​​信息。

PS。我正在使用 phalcon 2.0.10

【问题讨论】:

  • 我也有同样的疑惑,但是经过一番搜索,我没有找到任何东西。也许作为 B 计划,您总是可以在 BaseModel 中创建一个方法,该方法接受 Collection 和 WhereClause 作为参数并迭代结果集。就像此处文档中的示例:docs.phalconphp.com/en/latest/reference/… 让我们希望其他人有更好的解决方案:)
  • 作为一种解决方法,我创建了一个方法并直接使用 mongoclient 'remove()',但真的期待一些不那么脏的东西)
  • 嗨,Eugene Sue,你能分享你的方法吗,请告诉我们把它放在哪个文件中:)

标签: php mongodb phalcon


【解决方案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"));

【讨论】:

  • 如果在模型中重命名表会怎样?在基本模型中调用 $this->getSource() 之类的东西而不是 explode 不是更容易吗?
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2010-12-18
  • 2015-10-07
  • 2019-08-09
相关资源
最近更新 更多