如何以编程方式将索引-> 值添加到 php 中的链

How to programmatically add index->value to a chain in php

这是我的第一个问题,所以请给我提示以改进我的问题表述等。 我已经尝试过在网上到处搜索,我认为答案就在那里,但我最大的问题是,我不知道该用什么词来搜索这个问题。

现在问题来了: 我目前正在使用: https://github.com/sokil/php-mongo 创建一个应该在 mongodb 数据库集合中搜索 key/values 列表的搜索器。

我当前的代码看起来像这样(是的,有很多参数,等等。我知道,但我正在创建一个 drop 来替换太慢的遗留函数):

   public function searchTasks(
       int $start = 1, 
       int $end = 25,
       string $type = null,
       string $taskID = null,
       string $siteID = null,
       string $subject = null,
       ....... //Many more arguments following, but unused so far.
       ): \sokil\mongo\Cursor
   {
       return $this->collection
           ->find()
           ->where('siteID', $siteID)
           ->where('subject', $subject)
           ->whereGreaterOrEqual('status', 0);
   }

问题是,只要参数不为空,我只想添加“where”子句,例如:

   public function searchTasks(
       int $start = 1, 
       int $end = 25,
       string $type = null,
       string $taskID = null,
       string $siteID = null,
       string $subject = null,
       ....... //Many more arguments following, but unused so far.
       ): \sokil\mongo\Cursor
   {
       $arguments = []
       if($type != null) {
           array_push($arguments, ["type" => $type]);
       }
       return $this->collection
           ->find()
           ->where($arguments)
           ->whereGreaterOrEqual('status', 0);
   }

但是根据文档,这是不可能的,我没有找到像这样简单地添加通配符的方法:

   public function searchTasks(
       int $start = 1, 
       int $end = 25,
       string $type = "*",
       string $taskID = "*",
       string $siteID = "*",
       string $subject = "*",
       ....... //Many more arguments following, but unused so far.
       ): \sokil\mongo\Cursor
   {
       return $this->collection
           ->find()
           ->where('siteID', $siteID)
           ->where('subject', $subject)
           ->whereGreaterOrEqual('status', 0);
   }

如果您能帮我搜索这个叫什么的词等等,我将不胜感激。 祝一切顺利 托比

您的代码似乎无法获取(执行)您正在构建的查询。您可以在执行前添加 where 子句。试试这个:

$query = $this->collection->find();

if ($siteID !== null) {
    $query->where('siteID', $siteID);
}

return $query;

然后您稍后在您的函数findAll() 外部调用。