Как программно добавить индекс-> значение в цепочку в php - PullRequest
0 голосов
/ 11 июля 2020

Это мой первый вопрос, поэтому, пожалуйста, дайте мне подсказки по улучшению формулировки моего вопроса, и т. Д. c. Я уже пробовал искать повсюду в Интернете, и думаю, что ответ есть, но моя самая большая проблема в том, что я не знаю, какие слова использовать для поиска этой проблемы.

Теперь к проблеме: я в настоящее время используется: https://github.com/sokil/php-mongo Для создания поисковика, который должен выполнять поиск по списку ключей / значений в коллекции базы данных mongodb.

Мой текущий код выглядит следующим образом (Да, способ множества аргументов и т.д. c. Я знаю, но я создаю каплю вместо устаревшей функции, которая работает слишком медленно):

   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);
   }

Если у вас есть способ помочь мне с поисковыми словами для того, что это называется, et c. Я буду очень признателен. Всего наилучшего, Тоби

1 Ответ

1 голос
/ 11 июля 2020

Кажется, ваш код не извлекает (не выполняет) создаваемый вами запрос. Вы можете добавить предложения where перед выполнением. Попробуйте следующее:

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

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

return $query;

Позже вы вызовете findAll() за пределами вашей функции.

...